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?
Ist die überladene Funktion Exit mit Value neu?
Weil hier bei mir gibts die nicht, ich hab nur ein Exit()!
Ja, keine Ahnung, welche Delphi Version, irgendwas zwischen 7 und 2009
Sehe ich auch so. Der Code wird u.U. einfach kürzer und übersichtlicher.
Zumal man mit Exit(Value) in Funktionen auch gleich einen Result-Wert zuweisen kann.
Schonmal Fremdcode debuggt, wo irgendwo nen Exit drin ist und man sich wundert, warum bestimmte Sachen nicht mehr ausgeführt werden?