Opérateurs logiques, partie 3
Fait partie de la section Fundamentals du Journey Rust de Coddy — leçon 23 sur 75.
Lors de la vérification de plusieurs conditions, l'ordinateur s'arrête de vérifier dès qu'il connaît la réponse finale (c'est ce qu'on appelle l'évaluation court-circuit).
Par exemple :
let x: i32 = 0;
let y: i32 = 5;
let result: bool = x != 0 && y / x > 2;Ici x est égal à 0, par conséquent il n'évaluera pas y / x > 2. Si nous inversions l'ordre :
let result: bool = y / x > 2 && x != 0;Cela entraînera une erreur car y sera divisé par 0, ce qui est illégal en mathématiques.
Cette technique est utilisée pour optimiser l'évaluation des expressions logiques. Par exemple :
let a: i32 = 0;
let b: i32 = 2;
let c: i32 = 3;
let d: i32 = 5;
let result: bool = (a > 0 && b < 2) || (c < -5 && d < 10);Dans cet exemple b < 2 et d < 10 ne seront pas évalués car a > 0 et c < -5 sont tous deux faux.
Défi
DébutantCréons un programme pour décider si c'est une bonne journée pour la production d'énergie par panneaux solaires
Initialisez ces variables :
is_sunnyavec la valeur truewind_speedavec la valeur 5.4temperatureavec la valeur 23solar_panel_outputavec la valeur 9is_cloudyavec la valeur false
Créez une expression logique qui vérifie TOUTES ces conditions :
- Il fait beau
- La vitesse du vent est inférieure à 10
- La production du panneau solaire est inférieure à 15
- La température est supérieure à 20 OU il n'y a pas de nuages
Aide-mémoire
Rust utilise l'évaluation court-circuit lors de la vérification de plusieurs conditions - il arrête l'évaluation dès que le résultat final est déterminé.
Avec && (ET), si la première condition est fausse, la seconde ne sera pas évaluée :
let x: i32 = 0;
let y: i32 = 5;
let result: bool = x != 0 && y / x > 2; // Sûr - y/x ne sera pas évaluéAvec || (OU), si la première condition est vraie, la seconde ne sera pas évaluée :
let a: i32 = 0;
let b: i32 = 2;
let c: i32 = 3;
let d: i32 = 5;
let result: bool = (a > 0 && b < 2) || (c < -5 && d < 10);
// b < 2 et d < 10 ne seront pas évaluésCette optimisation évite les calculs inutiles et peut prévenir des erreurs d'exécution comme la division par zéro.
Essayez vous-même
fn main() {
// Initialiser les variables
// L'expression logique complète
let result: bool =
// Ne pas supprimer les lignes ci-dessous
println!("Checking conditions for solar energy production...");
println!("1. Is it sunny? {}", is_sunny);
println!("2. Is wind speed safe? {}", (wind_speed < 10.0));
println!("3. Can panels produce more? {}", (solar_panel_output < 15));
println!("4. Is temperature good OR no clouds? {}", (temperature > 20 || !is_cloudy));
println!("\\nFinal result - Good day for solar energy production: {}", result);
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fundamentals
4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloRaccourcis arithmétiquesOpérateurs de comparaisonComparaison de chaînes7Entrées/Sorties de base
Afficher dans la consoleLire la saisie utilisateurRécapitulatif - Jusqu'à 120Récapitulatif - Vrai ou Faux5Opérateurs, partie 2
Opérateurs logiques, partie 1Opérateurs logiques, partie 2Récapitulatif - Logique simpleOpérateurs logiques, partie 33Variables - Partie 2
Déclaration de typeConventions de nommageInférence de typeRécapitulatif - Initialiser des variablesConversion de type9Boucles
Boucle For sur une sérieBoucle WhileBreakContinueBoucles imbriquéesÉtiquettes de boucleBoucle infinieRécapitulatif - Entrée dynamique12Bases des tableaux
Déclaration de tableauxTableau comme paramètreAccès aux élémentsModification de tableauxRécapitulatif - Affichage formaté d'un tableau15Opérations sur les chaînes
Méthodes de chaînesMacro format!Conversion de chaînesRécapitulatif - Format