peace software
  Berndt Wischnewski  Richard-Wagner-Str. 49  10585 Berlin 
  Tel.: 030 - 3429075  FAX : 030 34704037  email: webmaster@peacesoftware.de  Ust-ID: DE135577379 
<= Previous

 

C Kurs - der geheimnisvolle ? Operator

Nachdem Sie alles über die if - Abfrage gelernt haben, kommt jetzt der etwas seltener benutzte ? Operator an die Reihe. Bei der Entwicklung eines Programmes treten häufig Konstrukte der Form

if(condition)
  Expression1
else
  Expression2

auf. Der ? Operator erlaubt es diese vier Programmzeilen in eine Kurzform zu bringen. Die Bedingung ist, man hat eine Testabfrage mit Zuweisung, ein Ergebnis das zugewiesen wird wenn der Test true ergibt und ein Ergebnis das im Falle von false zugewiesen wird.

condition? Expression1 : Expression2;

z.B. :
int x, y;

x = 10;
y = x > 9 ? 100 : 200;

Hier wird gefragt, ist x größer 9, wenn ja weise y 100 zu, wenn nein, dann weise y 200 zu. Da x größer 9 ist, ist y am Ende 100.
Dies entspricht folgender if Abfrage:

if(x > 9)
  y = 100;
else
  y = 200;

Die Zuweisung steht am Anfang y = ..., danach folgt die Abfrage ... x > 9 ... . Dann folgt das Fragezeichen gefolgt von den beiden Werten die zugewiesen werden können. Als erstes steht der Wert, der zugewiesen wird wenn die Abfrage wahr ergibt. Danach ein Doppelpunkt, gefogt von dem Wert der zugewiesen wird, wenn die Abfrage falsch ergibt. Die Zuweisung zu einer Variablen muss vorne stehen, das folgende Konstrukt, wo die Zuweisung innerhalb der Wertefelder erfolgt, funktioniert nicht.

x > 9 ? y = 100 : y = 200; // dies ist falsch, Syntaxfehler

 

Man kann die Sache natürlich auch ineinander schachteln wie z.B. hier:

int x, y, z, fak = 42;

x = 10; y = 100;
z = x > 10 ? (y > 50 ? 1 : 2) : (y > 100 ? y * fak : y / fak);

Also, wenn x > 10 ist (ist es aber nicht) dann frage ob y > 50 ist (wäre richtig) in dem Falle weise z die 1 zu; ist y nicht größer 50 (wäre falsch) dann weise z die 2 zu. Ist x jedoch nicht größer 100 (wahr), dann frage ob y > 100 ist (falsch), wenn ja weise z (y mal fak) zu, sonst(wahr) weise z (y geteilt durch fak) zu. Am Ende sollte die Variable z dann 100 / 42, also 2 enthalten.

Die Anwendung des ? Operators ist vielfach recht nützlich, das Programm bleibt gut lesbar, wird kürzer und man spart sich einiges an tippen. Ob man den ? Operator jedoch komplex verschachteln sollte ist sicherlich Geschmackssache.

<= Previous











Die Klassiker von Donald Knuth, für Informatik Studenten ein Muss, für alle anderen harter Stoff: