Einzelnen Beitrag anzeigen

silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#9

AW: Variablen "einsparen" <-> längere Befehlszeilen. Was ist sinnvoll?

  Alt 8. Feb 2012, 21:20
Hallo zusammen,

tut mir Leid, dass ich erst jetzt antworte, aber der knappe Halbmarathon hat mich doch ziemlich geschafft.

Die Posts schön zusammenfassen tut es mMn Furtbichler
Zitat:
Lokale Variablen sind genau dann sinnvoll, wenn sie die Lesbarkeit erhöhen oder einen erneuten redundanten Aufruf ersparen.
Medium hat ebenfalls das DRY-Prinzip angesprochen. Das ist meiner Meinung nach der wichtigste Grund, Variablen überhaupt einzusetzen.

Beispiel: Das von mir viel zelebrierte Auseinanderpflücken eines Strings (schlagt mir jetzt aber bitte kein RegEx vor)
Delphi-Quellcode:
var
  temp : string;
  p1, p2 : Integer;
[...]
temp := '<a href="';
p1 := Pos(temp, MyString);
if p1 > 0 then
begin
  p1 := p1 + Length(temp);
  p2 := PosEx('"', MyString, p1);
  MyString := Copy(MyString, p1, p2 - p1);
end;
Hier die drei Variablen ersetzen zu wollen, würde definitiv in einer Menge Schreibarbeit und Kopfkratzen ausarten.

Die von Luckie, Furtbichler, Himitsu und anderen angesprochene vernünftige Benamsung von Variablen spart natürlich einen gewissen Teil dieses Kopfkratzens ein, da habt Ihr vollkommen Recht.
Heute schreibe ich auch "edAusgabePraemie" und nicht mehr "Edit3". Aber ich finde "p1" übersichtlich genug (so heißt es bei mir schon seit langer Zeit) und es muss nicht "iPosStart" heißen, damit ich später noch meinem Gedankengang folgen kann.


Während das DRY-Prinzip nach halbwegs objektiv ist, kommen wir doch mit der Lesbarkeit in einen völlig subjektiven Bereich hinein.
Ich sage (gilt ausschließlich für mich!) dass mich eine Variable, die ich nur ein einziges Mal brauche, eher irritiert, da ich nach dem DRY-Prinzip noch eine weitere Verwendungsstelle erwarte.

Aus einem aktuellen "5h-Projekt": Ich schreibe lieber
arr[i].Datei := StringReplace(Trim(SLt.Strings[2]), ' MiB', '', [rfReplaceAll]);
und nicht
Delphi-Quellcode:
temp_string := Trim(SLt.Strings[2]);
arr[i].Datei := StringReplace(temp_string, ' MiB', '', [rfReplaceAll]);
Ja, das war jetzt ein sehr einfaches Beispiel, bei dem auch Sir Rufo und Himitsu vermutlich gesagt hätten, dass es "generell [...] ein Grenzfall für die Verwendung einer lokalen Variable" sei.
Dass man das auf der anderen Seite nicht übertreiben muss, steht auch fest. Selbst ich schreibe lieber
Delphi-Quellcode:
d := Copy(SL.Strings[i], 1, 2);
m := Format('%.2d', [FindMonth(Copy(SL.Strings[i], 4, 3))]);
y := Copy(SL.Strings[i], 8, 2);
bib.book[bib.findByTitle('Bordbuch Delta VII')].Date := y + '-' + m + '-' + d;
und nicht einen unverstehbaren und unwartbaren Spaghetticode wie
bib.book[bib.findByTitle('Bordbuch Delta VII')].Date := Copy(SL.Strings[i], 8, 2) + '-' + Format('%.2d', [FindMonth(Copy(SL.Strings[i], 4, 3))]) + '-' + Copy(SL.Strings[i], 1, 2);

Die von Uwe Raabe angesprochene Auswertbarkeit im Debugger ist natürlich ebenfalls ein Vorteil, der mir auch schon das eine oder andere Mal aus der Patsche geholfen hat. (Auf der anderen Seite gibt es aber auch OutputDebugString(...), das ebenfalls gute Dienste leistet, besonders in Threads)

Es gibt wirklich Vorteile für die Verwendung von lokalen Variablen: Das DRY-Prinzip und die Debugbarkeit seien da mal genannt.

Was die bessere Lesbarkeit anbelangt:
Ich bin nach wie vor der Meinung, dass nicht jede Variable nötig ist.
Beispielsweise ist mir eine kürzere (von der Anzahl der Zeilen) Methode lieber als eine längere. Bei der kürzeren müssen zwangsläufig einige Befehle zusammengefasst werden, was die einzelne Zeile länger werden lässt.
Es ist aber für mich wichtiger, um einen Überblick zu bekommen, schnell erkennen zu können, was diese Methode macht. Dafür nehme ich in Kauf, dass ich bei der einen oder anderen Befehlszeile einen Moment länger überlegen muss (solange es wie gesagt nicht in Spaghetticode ausartet).

Ich denke, man muss sich dabei irgendwo in der Mitte treffen.

Wie immer in kurz: Ihr sagt mehrheitlich, dass die Verwendung von (lokalen) Variablen positiv gesehen werden kann, da sie der Lesbarkeit anträglich sind.


Danke und tschüss

Das sollte jetzt keine Belehrung an Euch sein, sondern eher meine selbstreflektive Zusammenfassung der Dinge, die Ihr geschrieben habt.
Tobias
Bitte nicht hauen , ich weiß es nicht besser
  Mit Zitat antworten Zitat