Was bedeutet "return" bei dieser Methode?

hlhk - (programmieren, Java)

8 Antworten

Er gibt nichts zurück, er springt nur aus der Methode heraus.

Auf Maschinenebene stellt er den zuvor gesicherten Stackpointer wieder her, was dazu führt, dass der oberste Frame "vom Stack geworfen wird", und setzt dann die Ausführung an der Stelle fort, an der die Methode aufgerufen wurde - bzw. exakt einen Maschinenbefehl dahinter.

Zu diesem Zweck wird vor dem Sprung in die Methode der alte Instruction Pointer bzw. Program Counter auf dem Stack gesichert und für die Rückkehr wiederhergestellt.

return an dieser Stelle verlässt die Funktion

Sofern der Rückgabetyp deiner Methode void ist, wie hier:

static void down1(int n) {}

muss die Methode keine Rückgabe berücksichtigen, da void für nichts steht. (Also auch keine Rückgabe).

Allerdings verursacht ein return bei Methoden immer, dass an dieser Stelle die Methode beendet wird.

In deinem Beispiel wird eine Bedingung geprüft, unter der die Methode vorzeitig beendet wird.

NoHumanBeing  17.05.2017, 17:34

Genau.

Ich bevorzuge es allerdings, einen vorzeitigen Methodenabbruch zu vermeiden. Weil es sich letztlich um einen Sprungbefehl handelt, ist das vorzeitige return in meinen Augen ähnlich problematisch, wie der allseits geächtete goto-Befehl.

Wenn ich sagen möchte: "Führe den Code nur aus, wenn n größer Null ist." - Dann schreibe ich das auch genau so, mit einer Verzweigung. Also im obigen Beispiel ...

if (n > 0) {
System.out.print(n + ", ");
down1(n - 1);
}

Also lieber schreiben, wann ein bestimmter Block Code durchlaufen wird, anstatt zu schreiben, wann aus einem bestimmten Abschnitt Code herausgesprungen wird.

1
KnusperPudding  17.05.2017, 19:47
@NoHumanBeing

Eine absolut legitime vorgehensweise und vielleicht sogar bessere Methode um einen vorzeitigen Abbruch via return zu vermeiden.

Ich halte es dennoch für Geschmackssache, wie man sich hier entscheidet.

1

Du musst das return gar nicht schreiben.Wenn der Datentyp void ist dann muss nichts zurück gegeben werden also ist es irrelevant.

Ein „Return“ sagt dem Compiler vieler Programmiersprachen (C, C++, Java, Objective-C, Swift …), dass er das Unterprogramm/die Methode beenden soll. Ein Return kann einen Rückgabewert liefern, muss dies aber nicht!