2009-12-15 11 views
17

Ich weiß, dass es Zeiten gibt, wenn return; verwenden, können einen nützlichen Zweck in Java, wie in Bewachungs dienen:Sollten Methoden mit dem Rückgabetyp void eine return-Anweisung verwenden?

public void foo(Bar bar) { 
    if(bar == null) 
     return; 

    // bar is not null, go ahead and do stuff with it 
} 

Aber was ist nur das Ende einer Methode mit Rückgabetyp erreicht void? Zum Beispiel

public void printMenu() { 
    System.out.println("Print out some boilerplate info here, line 1."); 
    System.out.println("Print out some boilerplate info here, line 2."); 
    System.out.println("Print out some boilerplate info here, line 3."); 

    return; 
} 

Anders als reine Stil Vorlieben, gibt es Gründe für oder gegen einschließlich return;? Wenn ja, was sind sie?

EDIT: Nun, das wurde schnell beantwortet. Um die 15 Antworten zusammenzufassen: "Nein."

+0

Wenn die aufrufende Funktion oder Methode es nicht benötigt, warum es zurückgeben? Wenn man es auslässt, bleibt den zukünftigen Entwicklern weniger Verwirrung. –

Antwort

47

Vielleicht sind Sie nach Codezeile bezahlt?

Ansonsten gibt es wirklich keinen Grund, am Ende eine leere Rückkehr zu setzen.

+1

Was ist mit einem if-Block? Vielleicht habe ich eine rekursive Funktion und ich möchte meine Ausgangsbedingungen an der Spitze meiner Funktion? – Zoidberg

+5

Das wäre jetzt nicht "am Ende", oder? :-) Die Verwendung von 'return;' für 'void' ist perfekt, um 1000 verschachtelte ifs zu vermeiden - OP hat dies in seinem ersten Beispiel demonstriert. Die Frage bestand darin, 'return' kurz vor dem Schließen der Klammer zu verwenden, was völlig sinnlos ist. – ChssPly76

+2

Akzeptiert dafür, lustiger zu sein als die anderen gleichermaßen korrekten Antworten. – Pops

0

In Ihrem Beispiel ist die "Rückkehr" am Ende eine Frage des persönlichen, Team- oder Organisationsstils. Ich persönlich bevorzuge eine explizite Rückkehr.

1

Rein stilbasierte Frage, macht absolut keinen Unterschied (vielleicht eine zusätzliche ASM-Anweisung, aber wen interessiert das?). Tun Sie, was immer Sie sich wohler fühlen, oder befolgen Sie die Konvention, die zuvor im Code festgelegt wurde.

+4

Wenn ich mich richtig erinnere, gibt es dort eine implizite Rückgabeanweisung, egal ob getippt oder nicht. –

10

Ich vermeide sie, mich selbst. Es ist nur eine nutzlose Codezeile. In der Tat hat PMD eine Regel, die nach solchen unnützen return Aussagen überprüft.

4

Ich sehe keinen Grund, auch aus einer Stilperspektive, am Ende eine dangling Rückkehr zu haben. Schließlich wissen Sie, dass es zurückkehren wird, weil es dort eine Endklammer gibt ...

0

Ich denke, anders als persönliche Vorliebe, gibt es keinen Unterschied. Der erste Fall, ich denke, es ist legitim. Andernfalls sollten Sie die Anweisungen in eine große if-Anweisung packen.

Das letzte Beispiel die Rückkehr ist überflüssig.

1

Ich sage, mache das nie. Return-Anweisungen in void Funktionen dienen nur dazu, die Logik der Anweisung zu brechen. Wenn Sie dies tun, dann senden Sie eine verwirrende Aussage an die Leser Ihres Codes, wird man versucht zu denken, dass Sie vielleicht einige wenn Aussage, dass Sie vergessen haben. Immer auf Lesbarkeit achten.

0

Ich würde es nur von einem Konsistenzpunkt vermeiden. Es ist einfacher, es nie zu sagen, als sich daran zu erinnern, es immer hinzuzufügen.

0

Es dient keinem Zweck, aber wenn Sie es tun möchten (weil jeder in Ihrem Team es tut oder aus irgendeinem Grund), können Sie es tun.

1

Eine Idee von structured programming war:

Jede Routine genau einen Einstiegspunkt haben sollte und genau einen Ausgangspunkt.

Wenn Sie diese Richtlinie abonnieren, gibt die return-Anweisung die einzige Möglichkeit an, die Routine zu beenden.

In der Praxis ist, dass die Politik nicht Code klarer machen, und es seit den 1970er Jahren meist ignoriert. Wenn Sie mehrere Rückgabeanweisungen in anderen Routinen zulassen, sollten Sie Null-Return-Anweisungen zulassen, wenn dies am sinnvollsten ist.

1

Ich denke, dass unnötige Aussagen sind nur Lärm, also würde ich nicht, dass die Rückkehr am Ende hinzufügen. Davon abgesehen würde ich am Anfang der Methode Returns hinzufügen, wenn etwas nicht meinen Anforderungen entspricht oder, noch besser, ich würde IllegalArgumentException-Ausnahmen auslösen.

Verwandte Themen