Der Bedingungsoperator


Hier ist eine merkwürdige Sorte von Entscheidungsoperator. Er existiert aufgrund einer alltäglichen Programmiersituation: Einer Variablen wird ein Wert gegeben, wenn etwas wahr ist, und ein anderer Wert, wenn es unwahr ist. Zum Beispiel folgt hier eine if.. else-Anweisung, die der Variablen min den Wert von alpha oder den Wert von beta gibt, abhängig davon, welcher Wert kleiner ist.

if (alpha < beta) min = alpha; else min = beta;

Diese Art der Koinstruktion ist allgemein so gebreulich, daß sich die Entwickler von C++ (tatsächlich vor langer Zeit die Entwickler von C) einen kürzeren Weg ausdachten, um diesen Umstand auszudrücken: den Bedingungsoperator. Dieser Operator besteht aus zwei Synbolen, die mit drei Operanten arbeiten. Es ist der einzige dieser Art in C++; die anderen Operatoren führen ihre Operationen mit einem oder zwei Operatoren durch. Es folgt das entsprechende Gegenstück zu demselben Programmausschnitt, aber unter Verwendung eines Bedingungsoberators:

min = (alpha < beta) ? alpha : beta;

Der Teil zur Rechten des Gleichheitszeichen in dieser Anweisung wird bedingter Austruck genannt:

(alpha < beta) ? alpha : beta // Bedingter Austruck

Ein Fragezeichen und der Doppelpunkt machen den Bedingungsoperator aus. Der Ausdruck vor dem Fragezeichen

(alpha < beta)

ist der Prüfausdruck. Dieser Prüfausdruck und alpha sowie beta sin die drei Operanden.

Wenn der Prüfausdruck wahr ist, nimmt der gesamte bedingte Ausdruck den Wert des Operanten an, welcher den Fragezeichen folgt: in diesem Beispiel also alpha. Wenn der Prüfausdruck unwahr ist, nimmt der bedingte Ausdruck den Wert des Operanten an, der dem Doppelpunkt folgt: beta. Die runden Klammern un den Prüfausdruck werden vom Übersetzer nicht benödigt, sie sind aber üblich. sie erleichtern es, die Anweisung zu lesen (und das ist auch unbedingt nötig).

Als nächstes folgt ein Programm, CONDI.CPP, das den bedingten Operator einsetzt, um in einer Textzeile alle 8 Leerzeichen ein x zu drucken. Sie können diese Möglichkeit benutzen, um sich die Position der Tabulatorstopps auf dem Bildschirm anzeigen zu lassen.

// condi.cpp // Druckt alle 8 Spalten ein 'x' // Veranschaulicht Bedingungsoperator #include <iostream.h> void main() { for(int j=0; j<80; j++) // Für jede Spalte, { // ch ist 'x', wenn die Spaltennummer ein char ch = (j%8) ? ' ' : 'x'; // Mehrfaches von 8 ist, und cout << ch; // ' ' (Leerzeichen) im anderen Fall } }


Das Ergebnis:

x x x x x x x x


22