Abgelegt unter: Coding | Tags: code, java, operator, sauber, stil, ternär
Bei dem Java-Projekt eines Studenten, bei dem ich einen Teil erweitern soll ist mir aufgefallen, dass dieser eine gewisse Vorliebe für ternäre Operatoren hat. Zur Veranschaulichung/Erinnerung:
ergebnis = (a>b)?a:b;
weist ergebnis
den größeren wert (a oder b) zu. Es ist prinzipiell dasselbe wie
if(a>b) {
ergebnis = a;
} else {
ergebnis = b;
}
Offengesagt ist das eine Art der Fallunterscheidung, die ich in meinen Java-Vorlesungen nie bewusst mitbekommen habe. Nach ein bis zwei Minuten Google sagt mir außerdem Gallileocomputing:
Der ternäre Operator – auch konditionaler Operator genannt – ist ein Relikt von C/C++.
Das klingt offengesagt nicht unbedingt nach einem Schreibstil, den man nachahmen sollte. Und gerade bei Zeilen wie
element(b?"y":"n");
drängt sich einem die Frage auf, ob das jetzt Java, oder vielleicht doch eher Perl ist.
Einzig bei Feldern von rein statischen Klassen kommt mir der ternäre Operator berechtigt vor:
static final boolean LOCAL = true;
public static File BASE_DIR = (LOCAL)?LOCAL_WEBAPP:new File(new File(CATALINA_HOME, "webapps"), "myApp");
und auch da kann man ihn durch echtes Java ersetzen:
public static File getBaseDir(){
if(LOCAL) {
return LOCAL_WEBAPP;
} else {
return new File(new File(CATALINA_HOME, "webapps"), "myApp");
}
}
Und wieso schreibe ich das jetzt so ausführlich? Weil’s mich in den Fingern juckt, bei einer Handvoll kleiner toString() Methoden mir die ganze if-else-Arbeit zu sparen und stattdessen einfach nur ein paar Fragezeichen und Doppelpunkte zu benutzen 😉