Aber in der Situation ist das Exit nicht (zwingend) erforderlich, da die Routine ohne das Exit zum gleichen Ergebnis führen würde.
Schreibtechnisch wird also ein Result := 1 durch Exit(1) ersetzt.
Da finde ich die Zuweisung des Rückgabewertes an Result deutlich intuitiver als ein Exit, auch wenn es letztlich zum gleichen Ergebnis führt.
Exit nutze ich persönlich nur, wenn ich in 'ner Fehlersituation (also im Exceptblock eines Trys) aus 'ner Routine raus muss und damit sicherstellen will, das, egal, was später noch in 'ner Routine implementiert wurde, die Routine beendet wird.
Aber in 'ner If-else-if-Kasskade mit Exit auszusteigen, obwohl die Logik so implemtiert ist, dass das Exit nicht erforderlich ist, find' ich persönlich eher befremdlich.
Delphi-Quellcode:
function Test : Integer;
begin
if a then begin
Exit(1);
end else
if b then begin
Exit(2);
end else
...
if z then begin
Exit(26);
end;
// Jahre später wird in der Routine eine Änderung nötig, z. B. sowas:
if (Result > 20) and (Result < 23) then begin
// Mit Exit haben wir nun ein Problem, vor allem dann, wenn es nicht so offensichtlich ist, wie hier im Beispiel.
// Mit der Nutzung von Result wäre es aber kein Problem.
end;
end;
Und:
Wenn man Code nur intuitiv betrachtet und daraus Schlüsse zieht, kann man schonmal deutlich schiefliegen. Da ziehe ich die grundsätzliche Auswertung des Quelltextes doch vor.
Oder das ganze mal mit Case:
Delphi-Quellcode:
function Test(i : Integer) : Integer
begin
case i of
1 : Exit(1);
2.. 10 : Exit(2);
11..100 : Exit(3);
else
Exit(42);
end;
end;
statt:
Delphi-Quellcode:
function Test(i : Integer) : Integer
begin
case i of
1 : Result := 1;
2.. 10 : Result := 2;
11..100 : Result := 3;
else
Result := 42;
end;
end;
Geht beides, Variante 2 ist mir da aber deutlich lieber.