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.

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.

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
@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

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!

Was möchtest Du wissen?