Zum Inhalt springen

If...Else in Rust

Mit if trifft dein Programm Entscheidungen: Je nach Bedingung führt es den einen oder den anderen Codeblock aus.

fn main() {
let age = 20;
if age >= 18 {
println!("Du darfst wählen");
}
}
▶ Selbst ausprobieren

Zwei Dinge solltest du beachten, weil sie Umsteiger aus anderen Sprachen oft stolpern lassen:

  • Um die Bedingung kommen keine Klammern – if age >= 18, nicht if (age >= 18).
  • Die Bedingung muss ein echtes bool sein. if age (eine Zahl) lässt sich nicht kompilieren – du brauchst zum Beispiel if age != 0.
fn main() {
let age = 15;
if age >= 18 {
println!("Du darfst wählen");
} else {
println!("Noch nicht alt genug");
}
}
▶ Selbst ausprobieren
fn main() {
let score = 72;
if score >= 90 {
println!("Note: sehr gut");
} else if score >= 75 {
println!("Note: gut");
} else if score >= 60 {
println!("Note: befriedigend");
} else {
println!("Note: nicht bestanden");
}
}
▶ Selbst ausprobieren

Rust prüft die Bedingungen von oben nach unten und führt den ersten Zweig aus, der passt – ganz wie du es erwarten würdest.

Jetzt kommt etwas, das Rust kann und viele andere Sprachen nicht: if kann einen Wert liefern. Du kannst es also auf der rechten Seite eines let verwenden:

fn main() {
let age = 20;
let status = if age >= 18 { "volljährig" } else { "minderjährig" };
println!("{status}");
}
▶ Selbst ausprobieren

Das funktioniert genauso, wie eine Funktion einen Wert zurückgibt: kein Semikolon nach dem Wert in jedem Zweig. Die einzige Bedingung: Beide Zweige müssen denselben Typ liefern (hier sind beide &str).

Du kannst ein if in ein anderes if setzen. Das funktioniert, aber zwei oder drei Ebenen tief wird es schwer lesbar. Oft kannst du die Bedingungen stattdessen mit den logischen Operatoren && (und) und || (oder) verbinden:

fn main() {
let temperature = 22;
let is_raining = false;
// Verschachtelt: funktioniert, rutscht aber nach rechts
if temperature > 15 {
if !is_raining {
println!("Verschachtelt: geh spazieren");
}
}
// Dieselbe Prüfung als eine Bedingung
if temperature > 15 && !is_raining {
println!("Verknüpft: geh spazieren");
}
// || ist wahr, wenn eine der beiden Seiten wahr ist
if temperature < 0 || temperature > 35 {
println!("Bleib drinnen");
} else {
println!("Das Wetter passt");
}
}

Ausgabe:

Verschachtelt: geh spazieren
Verknüpft: geh spazieren
Das Wetter passt
▶ Selbst ausprobieren

Verschachteln ist weiterhin sinnvoll, wenn der innere Block etwas Zusätzliches tut oder ein eigenes else hat. Wenn das äußere if aber nur dazu da ist, das innere abzusichern, sagt && dasselbe einfacher. Um zu prüfen, ob eine Zahl in einem Bereich liegt, schreibst du temperature >= 15 && temperature <= 25. Die Schreibweise 15 <= temperature <= 25 erlaubt Rust nicht.

Speichere eine Zahl n = 7. Verwende if als Ausdruck, um eine Variable kind auf "gerade" oder "ungerade" zu setzen, und gib dann 7 ist ungerade aus. Tipp: Eine Zahl ist gerade, wenn n % 2 == 0 gilt.

Lösung anzeigen
fn main() {
let n = 7;
let kind = if n % 2 == 0 { "gerade" } else { "ungerade" };
println!("{n} ist {kind}");
}

Ausgabe:

7 ist ungerade
▶ Selbst ausprobieren

Ein Kino verlangt 5 Euro für Kinder unter 12, 7 für Menschen ab 65 und 12 für alle anderen. Speichere ein age von 70, berechne den Preis price mit einem einzigen if / else if / else-Ausdruck und gib Ticket: 7 € aus. Tipp: Jeder Zweig muss eine Zahl zurückgeben, und das ganze if endet mit einem Semikolon nach der letzten }.

Lösung anzeigen
fn main() {
let age = 70;
let price = if age < 12 {
5
} else if age >= 65 {
7
} else {
12
};
println!("Ticket: {price} €");
}

Ausgabe:

Ticket: 7 €
▶ Selbst ausprobieren
  • if bedingung { ... } – keine Klammern nötig; die Bedingung muss ein bool sein.
  • Mit else if hängst du weitere Prüfungen an, mit else fängst du den Rest ab.
  • Verknüpfe Bedingungen mit && und ||, statt if in if zu verschachteln.
  • if kann als Ausdruck einen Wert liefern – beide Zweige müssen denselben Typ haben, und du brauchst ein else.

Kurzer Check

1. Was ist bei einer if-Bedingung in Rust Pflicht?

2. Was müssen beide Zweige erfüllen, wenn du if als Ausdruck mit let verwendest?

Punkte: 0 / 2