Kapitel: Logik

Bedingungen

Befehl: if, else

Im letzten Schritt (Vergleiche) hast du gelernt, wie du mit Vergleichen einen Wahrheitswert bekommst. Jetzt nutzen wir diesen Wahrheitswert, um deinem Programm zu sagen, was es tun soll.

Die if-Anweisung

Mit if (englisch für "wenn") führst du einen Codeblock nur dann aus, wenn eine Bedingung true ist. Die Bedingung steht in runden Klammern, der Codeblock in geschweiften Klammern - erinnert dich das an Variablen und den Scope? Genau, ein if-Block ist auch so ein Scope.

int alter = 20;

if (alter >= 18)
{
    Console.WriteLine("Du bist volljährig.");
}
Die Bedingung alter >= 18 ist genau der Vergleich, den du im letzten Schritt kennengelernt hast. Ist sie true, wird der Block dazwischen ausgeführt - sonst wird er einfach übersprungen.

Eingabe prüfen, bevor wir sie nutzen

Erinnerst du dich an das int.Parse-Beispiel aus Lass mich etwas eingeben? Dort haben wir einfach darauf vertraut, dass eine gültige Zahl eingegeben wird. Mit if kannst du das jetzt zumindest grob selbst prüfen, bevor du parst:

Console.Write("Wie alt bist du? ");
string eingabe = Console.ReadLine();

if (char.IsDigit(eingabe[0]))
{
    Console.WriteLine("Das sieht nach einer Zahl aus.");
}
else
{
    Console.WriteLine("Das ist keine Zahl!");
}
eingabe[0] greift auf das erste Zeichen des Textes zu - die Zählung beginnt dabei bei 0. char.IsDigit(...) ist eine fertige Methode, die dir sagt, ob ein einzelnes Zeichen eine Ziffer (0-9) ist, und liefert dir direkt einen bool zurück.
Das ist nur eine sehr grobe Prüfung: Sie schaut lediglich auf das allererste Zeichen. Bei einer Eingabe wie '5x' würde sie also fälschlicherweise sagen, es sei eine Zahl. Die richtige, zuverlässige Lösung heisst int.TryParse - die lernst du in einem späteren Kapitel. Für den Moment reicht uns diese einfache Version.

Der else-Zweig

Nehmen wir an, die Prüfung von eben war erfolgreich und wir können die Eingabe bedenkenlos in einen int umwandeln. Mit else definierst du dabei gleich eine Alternative für den Fall, dass eine Bedingung nicht zutrifft:

Console.Write("Wie alt bist du? ");
int alter = int.Parse(Console.ReadLine());

if (alter >= 18)
{
    Console.WriteLine("Du bist volljährig.");
}
else
{
    Console.WriteLine("Du bist noch nicht volljährig.");
}

Mehrere Bedingungen: else if

Manchmal reichen zwei Möglichkeiten nicht aus. Mit else if kannst du weitere Bedingungen anhängen, die der Reihe nach geprüft werden - hier teilen wir das Alter in mehrere Gruppen ein:

int alter = 15;

if (alter < 13)
{
    Console.WriteLine("Du bist ein Kind.");
}
else if (alter < 18)
{
    Console.WriteLine("Du bist ein Jugendlicher.");
}
else
{
    Console.WriteLine("Du bist volljährig.");
}
C# prüft die Bedingungen von oben nach unten und führt nur den ersten passenden Block aus. Bei alter = 15 ist alter < 13 false, aber alter < 18 ist true - also wird 'Du bist ein Jugendlicher.' ausgegeben, und die weiteren Bedingungen werden gar nicht mehr geprüft.

Kürzer: switch

Wenn du - wie eben - denselben Wert immer wieder mit else if auf Gleichheit prüfst, gibt es dafür eine kompaktere Schreibweise: switch.

int note = 2;

switch (note)
{
    case 1:
        Console.WriteLine("Sehr gut!");
        break;
    case 2:
        Console.WriteLine("Gut!");
        break;
    case 3:
        Console.WriteLine("Befriedigend.");
        break;
    default:
        Console.WriteLine("Da geht noch was.");
        break;
}
switch prüft note der Reihe nach gegen jeden case-Wert. Passt einer, wird der zugehörige Block ausgeführt. break beendet danach den switch - ohne break meldet C# einen Fehler (anders als z.B. in JavaScript). default ist optional und greift, wenn kein case passt - vergleichbar mit else.
switch eignet sich nur für Vergleiche auf Gleichheit mit festen Werten (wie hier note == 1, note == 2, ...). Für Bereiche wie bei unserem Alters-Beispiel (alter < 13) bleibst du bei if/else if.

Ob du else if oder switch verwendest, ist oft Geschmackssache - bei vielen einzelnen, festen Werten liest sich switch meist übersichtlicher.

Kurz zusammengefasst: Mit if führst du Code nur unter einer bestimmten Bedingung aus, mit else definierst du eine Alternative, mit else if kannst du mehrere Bedingungen nacheinander prüfen, und mit switch hast du bei vielen festen Werten eine übersichtlichere Alternative dazu.