ternär
Sonntag, 10. August 2008, 9:40 Uhr
Abgelegt unter: Coding | Tags: , , , , ,

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 😉