Mag nur meine Meinung, aber für jedes Exit sollte es einen Schlag in den Nacken geben.
Klar, an manchen Stellen kann man sich in etwas vertrackten Konstrukten einfach aus der Affaire ziehen, aber sauber gecoded ist es zu 99.99% vermeidbar.
Ähm, ja, ich hab das auch die meiste Zeit gedacht, aber um den Code kürzer zu halten, ist es wirklich sinnvoll, hier und da mal Exit zu verwenden.
Ein Beispiel:
Delphi-Quellcode:
// mit Exit
begin
if not FileExists(Filename) then Exit;
LoadFile();
ProcessFile();
DoSomethingElseWithFile();
end;
// ohne Exit
begin
if FileExists(Filename) then
begin // extra Zeile
// + Verschachtelung
LoadFile();
ProcessFile();
DoSomethingElseWithFile();
end; // extra Zeile
ROFL, hast du mal bei uns gearbeitet? Jedesmal, wenn ich solchen Code in alten Units sehe, ändere ich das sofort.
Ernsthaft - um 2 Codezeilen zu sparen? Worin leidet denn beim 2. die Lesbarkeit?
Stell dir vor, man baut mal sowas wie Logging ein:
Delphi-Quellcode:
begin
Logger.EnterMethod('LoadFile');
if not FileExists(Filename) then Exit;
LoadFile();
ProcessFile();
DoSomethingElseWithFile();
Logger.LeaveMethod('LoadFile');
end;
begin
Logger.EnterMethod('LoadFile');
if FileExists(Filename) then
begin
LoadFile();
ProcessFile();
DoSomethingElseWithFile();
end;
Logger.LeaveMethod('LoadFile');
end;
Ah, dann kommt bestimmt die Frage, wie man mit trotz Exit noch bestimmten Code ausführen kann... Merkste was?
Ja klar ist mir das bewusst. In diesem Fall ginge es nicht.
Deshalb meinte ich "hier und da".
Aber es gibt Fälle, in denen es andersherum viel leserlicher und besser ist, so wie von Zacherl angesprochen.
Zumindest habe ich so das Gefühl.
Und noch etwas:
Zitat:
"Ernsthaft - um 2 Codezeilen zu sparen?"
Wenn man mehrere Bedingungen hat, sagen wir mal 20, und jede voneinander abhäng ist - dh. alle Bedingungen erfüllt werden müssen, um eine Ebene tiefer gehen zu können, eignet sich hier meines Erachtens nach nur Exit!
Sonst hast du 2*20 Extra Zeilen und ganz zu Geschweigen von der ganzen Einrückung!
Edit:
Zitat von
FredlFesl:
Allerdings würde ich das "FileExists"-Beispiel auch so wie Stevie codieren.
Ach herjee, das war ja nur aus den Ärmeln geschüttelt. Es ging dabei nicht um den Inhalt, sondern ums Prinzip