gibt es eine Schule des Denkens in der Java-Community mit-repect-auf mehr kehrt in einem Verfahren verwendet wird, wie im Folgenden dargestellt:Java Stil mit Achtung-to Multiple Returns, gebraucht als "Wächter"
public SomeClass someMethod(int someValue) {
if (someValue < SOME_CONSTANT) {
return null;
}
SomeClass someClass = null;
// and now, the body of the method that performs
// the heavy lifting
return someClass;
}
Ich "wuchs" unter dem Mantra "single-entry-point, single-exit-point", aber ich kann sehen, wie die Verwendung einfacher Wachen den Code lesbarer/wartbarer machen (dh Ebenen der Verschachtelung eliminieren). Der „Single-Ausgang-Punkt“ -Version wie ... aussehen würde
public SomeClass someMethod(int someValue) {
SomeClass someClass = null;
if (someValue < SOME_CONSTANT) {
// and now, the body of the method that performs
// the heavy lifting
}
return someClass;
}
Dies ist zugegebenermaßen etwas wie ein triviales Beispiel, aber ich kann sehen, wo mehr Voraussetzungen in größerer Verschachtelung führen könnten. Persönlich würde ich immer noch halten, "Renditen während der Methode nicht zu streuen" für andere Zwecke (dh nur "Rückkehr" als Ergebnis einer Wache oder am Ende der Methode), aber ich frage mich, wie Rest der Java-Community fühlt sich an.
hinzugefügt "apple Beispiel" ...
public Pie makeApplePie(Apple apple) {
if (apple == null) {
return null;
}
// do cool stuff with apple
return new Pie();
}
'someMethod' In dem Beispiel, das Sie beschrieben haben, scheint es zwei Rollen zu geben, im Gegensatz zu einem. Normalerweise würde ich 'someValidation' in einer Methode tun, und wenn es passiert, dann' 'someMethod' 'weiter so lange arbeiten, bis' someValidation' vergeht. Wenn Sie eine Methode namens "cutApple" haben, die Objekte akzeptiert, die nicht Apple sind, aber nichts mit Nicht-Äpfeln, warum verifizieren Sie nicht einfach, ob das Objekt ein Apple ist, bevor Sie darum bitten, es zu schneiden? – Compass
Sie haben den Punkt meiner Frage etwas verpasst. Wenn ich "Äpfel" haben wollte, dann würde ich den Parameter eingeben (Vice macht eine separate Validierung). Aber, mit deinem Beispiel. Ich habe meiner ursprünglichen Frage ein "Apfel-Beispiel" hinzugefügt. Aber meine ursprüngliche Frage bezüglich der Verwendung von Returns als Wächter bleibt die Hauptimplementierung einer Methode. – SoCal
http://StackOverflow.com/Tags/Coding-Style/info – shmosel