Stilfrage

Ich habe folgende drei Variante einer Methode implementiert und hatte einen erbitterten Streit, welche denn die klarste und wartungsfreundlichste sei. Daher würde ich gerne mal wissen, wie Ihr das seht. Also kommentiert recht eifrig!

Variante 1

private void updateActions(){
		boolean kundeSelected = kundenAuswahl.getSelection()!=null;
		removeKunde.setEnabled(kundeSelected);
	}

Variante 1a

private void updateActions(){
		removeKunde.setEnabled(kundenAuswahl.getSelection()!=null);
	}

Variante 2

	private void updateActions1(){
		if(kundenAuswahl.getSelection()!=null){
			removeKunde.setEnabled(true);
		} else {
			removeKunde.setEnabled(false);			
		}
	}	
This entry was posted in Java, Software, alt. Bookmark the permalink.

4 Responses to Stilfrage

  1. wirzi says:

    Ich kann auch bei genauem Hinsehen keinen Unterschied zw 1 und 1a feststellen, schlage daher noch 1b vor:

    private void updateActions()
    {
    removeKunde.setEnabled(kundenAuswahl.getSelection()!=null);
    }

    Ich selbst mag Version 2 wegen Ihrer expliziten Formulierung.
    Insgesamt fehlt mir allerdings in allen Varianten das Vertrauen, dass kundenAuswahl dereferenzierbar ist und demzufolge eine entsprechende Prüfung.
    Wenn das also Sichergestellt ist, würde ich 2w oder 1w bevorzugen:

    1w:
    private void updateActions()
    {
    if (kundenAuswahl!=null)
    removeKunde.setEnabled(kundenAuswahl.getSelection()!=null);
    }

    2w:
    private void updateActions1()
    {
    if((kundenAuswahl!=null) && (kundenAuswahl.getSelection()!=null))
    {
    removeKunde.setEnabled(true);
    }
    else
    {
    removeKunde.setEnabled(false);
    }
    }

    Übrigens: Ich liebe die geschweiften Klammern in eigenen Zeilen.
    Macht für mich persönlich den Code noch besser lesbar.

    1w ist für mich ein bisschen c-ig, und weniger leicht lesbar als 2w.
    Ich hätte automatisch wahrscheinlich am ehesten 2w hingeschrieben.

  2. kiu says:

    Ich wuerde 1A bevorzugen, da es kurz und einfach ist. Um dem Code lesbarer zu machen tendiere ich oft zu 1, da sieht man wenigstens sofort (kundeSelected) was das Filterkriterium ist.

    Die Variante 2 ist mir zu aufgeblaeht, wenn in einem if/else nur etwas auf true/false gesetzt wird, hat man imho was falsch gemacht 😉

  3. kiu says:

    @wirzi: Du hast per bloglines reingeschaut ? Da ist 1 und 1A wirklich identisch, auf der Webseite gibt es aber einen Unterschied, den du aber selbst gefunden hast.

    Warum moegen die Leute eigentlich geschweifte-klammern-in-eigene-zeilen ?

  4. felix says:

    Ich war auch für Variante 2, aus dem Grund den Simon nennt. Das if verschleiert die an und für sich triviale Abhängigkeit.

    Andererseits gibt’s ‘ne Menge Leute, denen das nicht gefällt und unklarer erscheint (Hier steht’s zwei zu eins gegen mich.). Man scheint Ausdrücke die einen boolschen Wert haben nur in expliziten Bedingungsklauseln also if(…), while(…) zu erwarten.

    Die if-clause entfalltet ihre ganze Gefährlichkeit, wenn der Code erweitert wird. Wo fügt man neuen Code ein, im if-Zwei,g im else-Zweig, oder außerhalb?

    Ein weiterer interessanter Fall und hier würde ich Variante 2 als gleichwertig sehen ist der nicht triviale Zuweisungsfall, in dem nicht nur true und false zugewiesen werden. Für Variante 1 würde der ternäre Operator cond?value1:value2 notwendig werden, obwohl ich persönlich diese Lösung ganz gerne lese. Fühlt sich irgendwie zustandsfreier an.

    Der Code ist aus einem kleinen GUI-Beispiel wo’s drum geht die Actions entsprechend dem Zustand des Modells zu enablen oder zu disablen. Erfahrungsgemäß kann das sehr schnell sehr chaotisch werden.

Leave a Reply

Your email address will not be published. Required fields are marked *