if
Rusts if
ist nicht besonders kompliziert, aber es ähnelt viel mehr dem
if
einer dynamisch typisierten Sprache, als dem einer
eher traditionellen Sprachen.
Lass uns also darüber sprechen, um sicherzustellen, dass du die Feinheiten verstehst.
if
ist eine spezielle Form eines allgemeineren Konzeptes, dem Zweig [branch].
Der Name stammt von dem Zweig im Baum: Ein Entscheidungspunkt, an welchem
verschiedene Wege gegangen werden können, je nachdem wie du dich entscheidest.
Im Falle von if
gibt es eine Entscheidung mit zwei möglichen Pfaden:
# #![allow(unused_variables)] #fn main() { let x = 5; if x == 5 { println!("x is five!"); } #}
Wenn wir den Wert von x
zu etwas anderem ändern würden, dann würde die
"x is five!" Zeile nicht ausgegeben werden. Genauer gesagt, wenn der Ausdruck
nach dem if
zu true
ausgewertet wird, dann wird der
nachfolgende Block ausgeführt. Wird er zu false
ausgewertet,
dann wird der Block nicht ausgeführt.
Wenn du möchtest, dass in dem false
Fall etwas passieren soll,
dann benutze else
:
# #![allow(unused_variables)] #fn main() { let x = 5; if x == 5 { println!("x is five!"); } else { println!("x is not five :("); } #}
Wenn es mehr als einen Fall gibt, benutze else if
:
# #![allow(unused_variables)] #fn main() { let x = 5; if x == 5 { println!("x is five!"); } else if x == 6 { println!("x is six!"); } else { println!("x is not five or six :("); } #}
Das ist alles ziemlich standardgemäß. Man kann aber auch sowas machen:
# #![allow(unused_variables)] #fn main() { let x = 5; let y = if x == 5 { 10 } else { 15 }; // y: i32 #}
Was wir auch so schreiben könnten (und wohl auch lieber sollten):
# #![allow(unused_variables)] #fn main() { let x = 5; let y = if x == 5 { 10 } else { 15 }; // y: i32 #}
Dies funktioniert, weil if
ein Ausdruck ist. Der Wert den der if
Ausdruck
zurückgibt ist der letzte des jeweiligen Zweiges.
Ein if
ohne else
gibt immer ein ()
zurück.