Bedingungen kennen wir aus dem Alltag: Wenn ich eine gute Mathearbeit schreibe, bekommen ich eine gute Note und meine Eltern sind zufrieden. Ansonsten bekommen ich eine Schlechte Note und meine Eltern sind unzufrieden.

An diesem kleinen Beispiel werden wir einmal den Typ Boolean kennenlernen und danach uns mit der Umsetzung in C# auseinandersetzen.

boolsche Ausdrücke

... können nur wahr (true) oder falsch (false) sein. Unser boolscher Ausdruck oben ist: Ich schreibe eine gute Mathearbeit, dieser kann entweder wahr oder falsch sein. Also "ich habe eine gute Mathearbeit geschrieben" oder eben "ich habe keine gute Mathearbeit geschrieben".

Wenn wir programmieren, müssen wir genau darauf achten, was die Negation von unserem Ausdruck bedeutet. In unserem Fall heißt das: Wenn ich keine gute Mathearbeit geschreiben habe, habe ich keine gute Mathearbeit geschrieben! Es heißt eben nicht, dass ich eine schlechte Mathearbeit geschrieben hab, sie kann ja auch im Prinzip mittelmäßig ausgefallen sein. Bei kürzeren Ausdrücken, mag das vielleicht noch einfach sein, sobald man aber mehrere Ausdrücke mit einander verknüpft, kann eine Negation durchaus schwieriger werden. Operatoren, mit denen wir Ausdrücke verknüpfen können sind zum Beispiel && (und), || (oder). Die vertikalten Striche für das Oder könnt ihr auf der Tastatur über [kbd]ALTGR[/kbd] +[kbd]<[/kbd] erreichen. Auf die Komplexität von verknüpften Ausdrücken werden wir in einem späteren Kapitel eingehen.

Bedingungen

Wenn wir jetzt die obige Bedingung in C# umsetzen wollen, dann brauchen wir ein Konstrukt, welches uns ermöglicht zwischen den beiden Ergebnissen der Prüfung Habe ich eine gute Mathearbeit geschrieben? zu unterscheiden und entsprechend anderen Quellcode auszuführen.

In C# nutzen wir dafür das if-else-Konstrukt:

1
2
3
4
5
6
7
8
if (/*Bedingung*/)
{
   /* Anweisung, wenn wahr */
}
else /* optional */
{
   /* Anweisung, wenn falsch */
}
  • In den runden Klammern müssen wir einen boolschen Ausdruck angeben, welcher überprüft werden soll.
    Also zum Beispiel warDieMathearbeitGut == true
  • In den geschweiften Klammern nach dem if, geben wir Anweisungen an, die ausgeführt werden sollen, wenn die Bedingung erfüllt wurde (im Bsp.: unsere Mathearbeit war gut).
    Also zum Beispiel: elternReaktion = "Wir sind stolz auf dich";
  • In der geschweiften Klammer nach dem else, geben wir Anweisungen an, die ausgeführt werden sollen, wenn die Bedingung nicht erfüllt wurde (im Bsp.: unsere Mathearbeit war nicht gut).
    Also zum Beispiel: elternReaktion = "Du musst mehr für Mathe üben!".
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool warDieMathearbeitGut = true; /* wir legen fest, dass sie gut war */
string elternReaktion = "";

if (warDieMathearbeitGut == true)
{
   elternReaktion = "Wir sind stolz auf dich";
}
else /* optional */
{
   elternReaktion = "Du muss mehr für Mathe üben!";   
}

Console.WriteLine(elternReaktion); 
Console.ReadLine();

condition_true

Wir ändern bool warDieMathearbeitGut = true; in bool warDieMathearbeitGut = false;:

condition_false

Der else-Teil des Programmcodes ist prinzipell optional. Das heißt wir müssen ihn nicht unbedingt angeben. Das ist immer dann hilfreich, wenn wir nur etwas tun wollen, wenn eine Bedingung erfüllt wurde. Wenn sie nicht erfüllt wurde, dann möchten wir nichts tun. Eine mögliches Beispiel wäre hier die Schülerreaktion auf die Frage Habe ich eine gute Mathearbeit geschrieben?. Der Schüler sagt seinen Eltern, dass er eine gute Mathearbeit geschrieben hat, oder er sagt es ihnen eben nicht:

1
2
3
4
5
6
7
8
9
10
bool warDieMathearbeitGut = true; /* wir legen fest, dass sie gut war */
string schuelerReaktion = "";

if (warDieMathearbeitGut == true)
{
   schuelerReaktion = "Mama, Papa, guckt mal, was wir heute bekommen haben...";
}

Console.WriteLine(schuelerReaktion); 
Console.ReadLine();

condition2_true

Wir ändern wieder bool warDieMathearbeitGut = true; in bool warDieMathearbeitGut = false;:

condition2_false

Bedingungen für Fortgeschrittene

Wollen wir einfache Anweisungen ausführen, wenn bestimmte Bedingungen erfüllt sind, dann gibt es auch eine Kurzvariante. Diese ist aber nur empfehlenswert, wenn wir eine oder nur wenige Anweisungen bedingt ausführen wollen.

Die bedingte Kurzanweisung sieht wie folgt aus: variable = (/*Bedingung*/) ? /* wertWahr */ : /* wertFalsch */; in unseren beiden Beispiel also:

1
2
string elternReaktion  = (warDieMathearbeitGut) ? "Wir sind stolz auf dich" : "Du muss mehr für Mathe üben!" ;
string schuelerReaktion = (warDieMathearbeitGut) ? "Mama, Papa, guckt mal, was wir heute bekommen haben..." : "" ;

Bei der Bedingung haben wir in diesem Fall den Passus == true weggelassen. Das hätten wir auch bei den obigen Beispiel tun können. Der Hintergrund ist der, dass in der Audruck in der runden Klammer immer auf Wahrheit überprüft wird. Ist der Ausdruck wahr, dann wird der Quellcode in der geschweiften Klammer unterhalb des ifs ausgeführt. In dem Fall, wo wir Ausdrücke auf ihre Richtigkeit prüfen, können wir == true immer weg lassen, da ein auszuwertender Ausdruck eben immer false zurückgibt, wenn er nicht richtig ist.