Einzelnen Beitrag anzeigen

NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#1

Performance VS Codestruktur/Codevereinfachung

  Alt 15. Dez 2015, 09:42
Hallo zusammen,

Ich wollte mal eine allgemeine Diskussionsrunde eröffnen, mit einem Thema das mich schon sehr lange in der Programmierung beschäftigt.
Wie der Titel schon sagt geht es darum, in welchem Fall oder bzw. ist es heutzutage überhaupt manchmal noch sinnvoll einen Code zuschreiben,
der etwas "komplizierter" im Aufbau ist, aber dadurch gute Performance gibt, oder eher einen Code, der eine leichte und verständliche Struktur hat.
Es bezieht sich größten Teils um Schleifen, die durchgegangen werden müssen, die ziemlich lang sind. Bei kleinen Arrays, ist es mir klar, dass
es bei den heutigen Rechner recht egal ist.
Ich nenne mal ein kleines Beispiel:
Ich habe einen Array mit folgenden Daten: var TestArray : array of Integer = [5,7,8,1,4,9,2,80,50...] Nun will ich bestimmte Zahlen aus diesem Array nur haben. Nehmen wir mal an : 5,50,9 Der Array kann aber halt unterschiedlich groß sein. (Und ich weiß, mann könnte ihn jetzt sortieren, darum geht es mir aber nicht. Sagen wir mal die "Daten", wofür das Beispiel steht, kann man nicht so leicht sortieren.)
Mir würden jetzt 2 Arten einfallen, dies in Code umzusetzen. Die eine wäre mit Sachen wie Break; ,Continue; . Die andere wäre mit einer Prozedur.

Delphi-Quellcode:
//Die Variante mit Break und Continue
var
  I, Found1,Found2,Found3 : Integer;
begin
  Found1 := -1; //Auf einen Wert setzen, der 100% nicht im Array ist.
  Found2 := -1;
  Found3 := -1;
  for I := Low(TestArray) to High(TestArray) do
  begin
    if (Found1<>-1) and (Found2<>-1) and (Found3<>-1) then
      Break;
    if TestArray[I] = 5 then
    begin
      Found1 := 5;
      Continue;
    end;
    if TestArray[I] = 50 then
    begin
      Found2 := 5;
      Continue;
    end;
    if TestArray[I] = 9 then
    begin
      Found3 := 5;
      Continue;
    end;
  end;
end;
Diese Variante würde jetzt sie Schleife durchgehen, bis die 3 Werte gefunden wurden. Es geht halt jetzt auch noch darum, dass die Anzahl von Werten, die gesucht werden sich ändern können.
Die Variante, kann man natürlich in ne "komplexere" Prozedur packen, um einen leichten Aufruf zumachen, aber das Grundprinzip wäre gleich.

Eine recht einfache Code Variante wäre jetzt diese :
Delphi-Quellcode:
function FindValue(aArray : array of Integer; aNeedValue : Integer) : Integer;
var
  I : Integer;
begin
  Result := -1;
  for I := Low(aArray) to High(aArray) do
  begin
    if aArray[I] = aNeedValue then
    begin
      Result := aNeedValue;
      Exit;
    end;
  end;
end;

var
  Found1,Found2,Found3 : Integer;
begin
  Found1 := FindValue(TestArray,5);
  Found2 := FindValue(TestArray,50);
  Found3 := FindValue(TestArray,9);
  if (Found1<>-1) and (Found2<>-1) and (Found3<>-1) then
  begin
    //Weitere Ablauf danach
  end;
end;
Mann sieht sofort das bei dieser Variante, der Array natürlich mehrmals durchgegangen wird, aber schon um einiges übersichtlicher ist. (Natürlich kann im Array auch nen Record liegen, wo ein Wert geprüft werden muss und ein andere Wert vom Record benötigt wird. Das Beispiel wollte ich jetzt recht einfach halten)

Jetzt zu den Fragen :
Macht es sinn einen Code in der 1. Variante eher zuschreiben als in der 2. ?
Macht es eigentlich überhaupt heutzutage noch sinn oder solche Code-Strukturen nachzudenken, oder denke ich da nur zu Performance orientiert?
Würde euch noch eine Variante vielleicht einfallen, die ich jetzt nicht bedacht habe, die beides vereint?
Was wäre euch als Programmierer, der an einem Projekt mitarbeitet, wichtiger?

Gruß NickelM
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat