Java void-Methode: If return, oder If else. Was ist professioneller?

11 Antworten

In dem if-Statement könntest du eine ganze Zeile noch bei beiden einsparen, wenn du die zwei Stringausgaben einfach mit einem Plus in einem Befehl verbindest.

Ansonsten würde ich tatsächlich entgegen einigen Meinungen hier Variante 1 nehmen.

Ich arbeite ungern mit else, da es da leicht zu Verwechslungen kommen kann, wenn man davor mehrere if-Statements hat.

Und bei einem Return sieht man sofort, dass da ein mögliches Ende ist.

Und wenn alles ordentlich indentiert und sauber geschrieben ist, sollte es da auch keine Probleme geben.

Woher ich das weiß:Studium / Ausbildung – Studium Informatik / Softwaretechnik
MrAmazing2 
Fragesteller
 26.05.2020, 19:46

Da hast du natürlich recht. Ich hab da nur zwei Stringausgaben hingemacht damit einfach mehr Code beim IF steht, als beim else. Weil bei meinem Original steht beim if auch mehr Code.

Poste immer ungern meinen Original-Code um keinen Abzuschrecken und die Frage nicht unnötig kompliziert scheinen zu lassen.

Original:

@EventTarget
public void onAutoComplete(EventAutoComplete event){
    String[] friends = Friendlist.friends;
    String[] onlinePlayers = event.getPlayerlist();

    if(onlinePlayers.length > 1) {
        Set<String> set = new HashSet<>(Arrays.asList(onlinePlayers));
        String[] onlineFriendsList = Arrays.stream(friends).filter(set::contains).toArray(String[]::new);
        mc.thePlayer.addChatMessage(new ChatComponentText(Arrays.toString(onlineFriendsList)));
        return;
    }
    System.out.println("Error, couldnt get onlineplayers");
}

Würdest du hier ebenfalls Option 2 nehmen, oder ein else benutzen?

0
msmw22  26.05.2020, 19:57
@MrAmazing2

Ich persönlich würde halt immer ein if Statement schreiben und dann schön indentiert darunter alles was dazu gehört und am Ende ein return;

Dann eine Leerzeile und das nächste oder eben das, was ausgeführt werden soll, wenn keine der if-Statements zutrifft.

Das ist aber wie gesagt nur wie ich das mehr oder weniger gelernt habe und mache.
Wenn du an einem Projekt mit anderen arbeitest, dann sollte man sich eh immer nach der Mehrheit richten.

1
MrAmazing2 
Fragesteller
 26.05.2020, 20:06
@msmw22

Oooh, eine Leerzeile danach, gute Idee, das macht das ganze echt viel übersichtlicher. Danke dir für deinen Rat 👍🏼

0

Ich bevorzuge Variante 1, mein Chef Variante 2.

Sobald Code rausspringen kann, springe ich raus.

Jede {...} versuche ich einzusparen, wo sinnvoll.

In einer for-Schleife mache ich viel mit continue. Werte, die nicht bearbeitet werden müssen/können, werden ohne Schachtelung übersprungen.

Jedes {} stört beim Lesen von fremden Code. Zwei Ebenen sind überschaubar.

In diesem speziellen Fall ist eindeutig das zweite besser. Das erste ist grauenhaft!

Hängt aber immer vom konkreten Fall ab!

Woher ich das weiß:Berufserfahrung

An sich ist es vor allem eine Entscheidung, ob der Code mehr in vertikaler oder horizontaler Richtung wachsen soll.

Der defensive Ansatz (Option 1, manchmal auch als Bouncer Pattern bezeichnet) reduziert Verschachtelungen. Die einzelnen Schritte werden nach und nach abgearbeitet (eine lineare Vorgehensweise lässt sich im Gehirn einfacher verarbeiten) und sobald möglich, springt der Code aus dem Block heraus. So ist es unter Umständen auch nicht notwendig, die komplette Funktion durchstöbern zu müssen. Es erfordert allerdings, dass man den Programmfluss von oben nach unten durchschaut.

Bei Option 2 hingegen kann man argumentieren, dass die Blöcke den Programmfluss klar deutlich machen und man vielleicht schneller in einzelne Sektionen des Funktionsblock springen kann. Umso mehr Code man allerdings hat, umso unübersichtlicher wird es. Vom Optimalfall (zu tiefe Verschachtelungen werden in andere Funktionen ausgelagert) kann man leider oft nicht ausgehen - es gibt so manchen Entwickler, der auf so etwas leider nicht achtet.

Ich würde deutlich zu Option 1 raten, gerade weil sich so horizontales Scrollen besser vermeiden lässt. Wenn man Option 2 wählt, sollte zumindest das else in einer eigenen Zeile stehen (meine Meinung).

if (condition) {
}
else {
}

So überliest es sich nicht so einfach.

Palladin007  27.05.2020, 01:43
Wenn man Option 2 wählt, sollte zumindest das else in einer eigenen Zeile stehen

Ich finde, jede geschweifte Klammer und auch jedes else sollte in einer eigenen Zeile stehen, aber das ist ja ein sehr beliebtes Streit-Thema :D

Vom Optimalfall (zu tiefe Verschachtelungen werden in andere Funktionen ausgelagert) kann man leider oft nicht ausgehen - es gibt so manchen Entwickler, der auf so etwas leider nicht achtet.

Ich würde ganz bewusst davon ausgehen, denn diese Frage stellt man nicht, wenn man dann an anderer Stelle schlampig arbeitet.

Klar, wenn sich tief verschachtelter Code aus irgendeinem Grund nicht vermeiden lässt, dann ganz klar Option 1.
Wenn man aber die Möglichkeit hat, Verschachtelungen zu vermeiden, dann würde ich klar zu Option 2 raten, da es später deutlich einfacher ist, einen Überblick zu gewinnen, ohne alles im Detail lesen zu müssen.

Wir wollen immerhin gut lesbaren Code und ich finde, wenn man Methoden klein und übersichtlich hält, ist Option 2 deutlich besser lesbar - naja, meistens zumindest.

weil sich so horizontales Scrollen besser vermeiden lässt

Wenn horizontales Scrollen notwendig ist, um eine Methode zu lesen, dann stelle ich mich quer und überarbeite den Code.
Kann doch nicht angehen, sowas :D

0
regex9  27.05.2020, 08:24
@Palladin007
Ich würde ganz bewusst davon ausgehen, (...)

Nun, ich gehe nicht davon aus. Ich kann mich zumindest an keinen Code erinnern, wo das einmal konsequent beachtet wurde. Das kann sogar einen verständlichen Grund gehabt haben.

Wenn horizontales Scrollen notwendig ist, um eine Methode zu lesen, dann stelle ich mich quer und überarbeite den Code.

Aufgrund von Namespace, Klasse und Methode hast du schon drei Einrückungen, die auf jeden Fall zu beachten sind. Dann kommen noch Tab 4 (Methodeninhalt) und 5 (Einrückung für Kontrollstrukturen) hinzu. Jetzt gibt es Programmierer, die aus gewissen Gründen die Code-Ansicht auf 75-100% Zoom stellen müssen, was auch sehr schnell zu horizontalem Scrollen zwingt. Jede Programmzeile in zwei Zeilen aufzubrechen, kann ja auch nicht sinnvoll sein.

0

Hiermit verleihe ich den Titel "Frage des Tages".

  1. Spart Code
  2. Ist lesbarer

Ich bevorzuge Variante 2. Meine letzten Kollegen auch.

Woher ich das weiß:Studium / Ausbildung – Informatik studiert und mit PCs & Technik beschäftigt