Nun, vielleicht bin ich einer der wenigen hier, die alt genug sind, um sich an einen der Hauptgründe zu erinnern, warum "nur eine Rückgabeanweisung" so stark gefordert wurde. Es geht darum, dass der Compiler effizienteren Code ausgeben kann. Bei jedem Funktionsaufruf schiebt der Compiler normalerweise einige Register auf den Stack, um ihre Werte zu erhalten. Auf diese Weise kann die Funktion diese Register als Zwischenspeicher verwenden. Wenn die Funktion zurückkehrt, müssen diese gespeicherten Register vom Stack wieder in die Register zurückgeschoben werden. Das ist eine POP (oder MOV -(SP),Rn) Anweisung pro Register. Wenn Sie eine Reihe von Rückgabeanweisungen haben, muss entweder jede einzelne alle Register zurückholen (was den kompilierten Code vergrößert) oder der Compiler muss verfolgen, welche Register geändert wurden und nur diese zurückholen (was die Codegröße verringert, aber die Kompilierungszeit erhöht).
Ein Grund, warum es auch heute noch sinnvoll ist, mit einer einzigen Rückgabeanweisung auszukommen, ist die einfache automatisierte Umstrukturierung. Wenn Ihre IDE das Refactoring durch Methodenextraktion (Auswahl einer Reihe von Zeilen und Umwandlung in eine Methode) unterstützt, ist es sehr schwierig, dies zu tun, wenn die Zeilen, die Sie extrahieren möchten, eine Return-Anweisung enthalten, insbesondere wenn Sie einen Wert zurückgeben.
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