Ich würde sagen, dass es äußerst unklug wäre, sich willkürlich gegen mehrere Ausstiegspunkte zu entscheiden, da ich die Technik in der Praxis als nützlich empfunden habe immer und immer wieder Ich habe in der Tat oft Überarbeitung des bestehenden Codes der Übersichtlichkeit halber auf mehrere Ausstiegspunkte. Wir können die beiden Ansätze folgendermaßen vergleichen:-
string fooBar(string s, int? i) {
string ret = "";
if(!string.IsNullOrEmpty(s) && i != null) {
var res = someFunction(s, i);
bool passed = true;
foreach(var r in res) {
if(!r.Passed) {
passed = false;
break;
}
}
if(passed) {
// Rest of code...
}
}
return ret;
}
Vergleichen Sie dies mit dem Code, bei dem mehrere Ausstiegspunkte sont erlaubt:-
string fooBar(string s, int? i) {
var ret = "";
if(string.IsNullOrEmpty(s) || i == null) return null;
var res = someFunction(s, i);
foreach(var r in res) {
if(!r.Passed) return null;
}
// Rest of code...
return ret;
}
Ich denke, letzteres ist wesentlich klarer. Soweit ich das beurteilen kann, ist die Kritik an mehreren Ausstiegspunkten heutzutage eine ziemlich archaische Sichtweise.
25 Stimmen
Ich stimme nicht zu, dass die Frage sprachenfeindlich ist. Bei einigen Sprachen ist die Mehrfachrückgabe natürlicher und bequemer als bei anderen. Ich würde mich eher über frühe Rückgaben in einer C-Funktion beschweren als in einer C++-Funktion, die RAII verwendet.
3 Stimmen
Diese Frage ist eng damit verbunden und enthält ausgezeichnete Antworten: programmers.stackexchange.com/questions/118703/
0 Stimmen
Sprachunabhängig? Erklären Sie jemandem, der eine funktionale Sprache verwendet, dass er einen Return pro Funktion verwenden muss :p