Aller au contenu

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 };
}