If...Else in Rust
Mit if trifft dein Programm Entscheidungen: Je nach Bedingung führt es den einen oder den anderen Codeblock aus.
Einfaches if
Abschnitt betitelt „Einfaches if“fn main() { let age = 20;
if age >= 18 { println!("Du darfst wählen"); }}Zwei Dinge solltest du beachten, weil sie Umsteiger aus anderen Sprachen oft stolpern lassen:
- Um die Bedingung kommen keine Klammern –
if age >= 18, nichtif (age >= 18). - Die Bedingung muss ein echtes
boolsein.if age(eine Zahl) lässt sich nicht kompilieren – du brauchst zum Beispielif age != 0.
if / else
Abschnitt betitelt „if / else“fn main() { let age = 15;
if age >= 18 { println!("Du darfst wählen"); } else { println!("Noch nicht alt genug"); }}else if für weitere Zweige
Abschnitt betitelt „else if für weitere Zweige“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"); }}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.
if als Ausdruck
Abschnitt betitelt „if als Ausdruck“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}");}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).
Bedingungen verknüpfen statt verschachteln
Abschnitt betitelt „Bedingungen verknüpfen statt verschachteln“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 spazierenVerknüpft: geh spazierenDas Wetter passtVerschachteln 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.
Übungen
Abschnitt betitelt „Übungen“1. Gerade oder ungerade
Abschnitt betitelt „1. Gerade oder ungerade“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 ungerade2. Kinokarten
Abschnitt betitelt „2. Kinokarten“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 €Zusammenfassung
Abschnitt betitelt „Zusammenfassung“if bedingung { ... }– keine Klammern nötig; die Bedingung muss einboolsein.- Mit
else ifhängst du weitere Prüfungen an, mitelsefängst du den Rest ab. - Verknüpfe Bedingungen mit
&&und||, stattifinifzu verschachteln. ifkann als Ausdruck einen Wert liefern – beide Zweige müssen denselben Typ haben, und du brauchst einelse.
Kurzer Check
Abschnitt betitelt „Kurzer Check“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
Weiterlesen
Abschnitt betitelt „Weiterlesen“if-Ausdrücke – Die Programmiersprache Rust: der offizielle Rundgang durchif,else ifundifin einerlet-Anweisung.- if/else – Rust by Example (auf Englisch): ein lauffähiges Beispiel, in dem Zweige einen Wert liefern.
- If expressions – The Rust Reference (auf Englisch): die genauen Regeln, wenn du es ganz präzise wissen willst.
- Rust auf Exercism (auf Englisch): kostenlose Übungsaufgaben mit Mentoring; die ersten drehen sich stark um
ifundelse.