Ich halte das mit den Exits so: Wenn ich sie nutze, dann nur ganz am Anfang einer Methode, mit einem kleinen Kommentar, dass hier Gültigkeitsprüfungen für Parameter etc. passieren.
Wenn es um komplexere Prüfungen geht, und Dinge, die dazu führen dass die Methode immerhin teilweise auch ausgeführt wird, arbeite ich lieber mit ein paar lokalen Variablen der Art "conditionIsValid" über die dann später verzweigt wird. Ein Exit mitten drin wird es bei mir also nicht geben, am Anfang z.B. zur Parametervalidierung helfen sie ein paar recht unübersichtliche if-Schachtelungstiefen zu vermeiden.
Was ich auch gerne mache, sind Early-Out-Szenarien der Art:
Delphi-Quellcode:
function TMyClass.IndexOfObject(someObject: TObject): Integer;
var
i: Integer;
begin
result := -1;
for i := Low(FArray) to High(FArray) do
if FArray[i] = someObject then
Exit(i);
end;
Für sowas ist Exit einfach klasse schlank.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)