Les conditions en Rust : if, else if, else
Comme dans tous les langages Rust possède les conditions if
, else if
et else
.
- On devra utiliser les accolades pour délimiter le bloc (comme pour les fonctions)
- Les parenthèses autour de la condition ne sont pas obligatoire
- Chaque condition doit retourner un booléen
Les conditions doivent toujours retourner un booléen
C’est une petite subtilité en Rust, chaque condition doit toujours retourner un booléen.
Si on met un autre type dans notre condition, Rust va retourner une erreur.
Exemple d’un code qui crash parce que la condition ne retourne pas un booléen :
fn main() { let age = 22; if age { // On va avoir un crash car age n'est pas un booléen // expected `bool`, found integer println!("Hello"); }}
Exemple d’un code qui fonctionne parce que la condition retourne un booléen :
fn main() { let age = 22; if age > 18 { println!("Je suis majeur"); }}
Rust s’arrête à la première condition vraie
Ce principe est très important, notamment si vous cherchez à optimiser les performances d’un programme.
Lorsque Rust parcours toutes les branches if
, else if
et else
, il va s’arrêter dès qu’il rencontre une condition
vraie.
À ce moment-là il saute toutes les branches restantes sans même tester les autres conditions !
Voilà pourquoi, il vaut mieux mettre la condition qui a le plus de chance de se produire en premier (dans le cas où vous savez laquelle c’est). Ça évite à Rust de tester des conditions inutiles.
fn main() { let age = 4;
if age > 0 && a <= 5 {// Rust execute la condition // Comme elle est vraie il rentre dans le bloc println!("Je suis un jeune enfant"); // Puis il va directement à la sortie du bloc sans même tester les autres conditions } else if age > 5 && a <= 11 { println!("Je suis un enfant"); } else if age > 11 && a <= 18 { println!("Je suis un ado"); } else if age > 18 && a <= 60 { println!("Je suis un adulte"); } else if age > 60 && a <= 90 { println!("Je suis un vieux"); } else if age > 90 { println!("Je suis une antiquité"); } // Et il se retrouve ici}
Utiliser if dans un let
La condition if
peut aussi être utilisée dans un let
pour donner une valeur à une variable en fonction d’une
condition.
fn main() { let age = 19; // is_major est true si age est sup ou égal à 18, sinon il est false let is_major = if age >= 18 { true } else { false };}