Opérateurs logiques Dart

Les opérateurs logiques ne traitent que des valeurs booléennes (true /false), ils servent à vérifier si une condition est remplie. Le résultat ne peut prendre que deux valeurs : true (vrai, condition valide), false (faux, condition invalide).

Tous les if, conditions des boucles while/for et conditions switch du code reposent intégralement sur des opérations logiques en arrière-plan.

Trois opérateurs principaux : ET, OU, NON

OpérateurNomFonction
&&ET logiqueLe résultat vaut true uniquement si les deux côtés valent true ; évaluation paresseuse
||OU logiqueLe résultat vaut true si au moins un des deux côtés est true ; évaluation paresseuse
!exprNON logique (négation)Inverse une valeur booléenne : true devient false, false devient true

Les opérateurs ET, OU et NON sont comparables aux circuits série et parallèle vus au collège. Le circuit série correspond à l’opérateur ET, le circuit parallèle à l’opérateur OU.

1. NON logique !

Inverse la valeur d’une expression booléenne unique.

Syntaxe :

!expression_booléenne

Exemple

void main() {
  bool isMale = false;
  print(!isMale); // true

  bool flag = true;
  print(!flag); // false
}Langage du code : PHP (php)

Ici, isMale et flag valent respectivement false et true au départ ; l’opérateur de négation inverse leurs valeurs.

On peut aussi l’appliquer à une expression complète, par exemple

void main() {
  int age = 12;
  print(!(age>18)); // true
}Langage du code : JavaScript (javascript)

L’expression age > 18 vaut initialement false, le ! devant inverse le résultat pour afficher true.

2. ET logique &&

ExpressionRésultat
true && truetrue
true && falsefalse
false && truefalse
false && falsefalse

Le résultat est true uniquement si les deux opérandes valent true ; si l’une d’elles est false, le résultat est systématiquement false.

Caractéristique de l’évaluation paresseuse : si le côté gauche vaut false, le code du côté droit n’est pas exécuté et la fonction renvoie immédiatement false.

La lampe ne s’allume (true) que si les deux interrupteurs sont fermés (true). Si l’un d’eux est ouvert (false), la lampe reste éteinte (false). Dès que le côté gauche est false, il est inutile d’évaluer le côté droit.

void main() {
  bool fun1() {
    print("La fonction s'exécute !");
    return true;
  }

  bool left = false;
  // Le côté gauche est false : fun1() ne s'exécute pas
  bool res = left && fun1();
  print("Résultat final : $res");
}Langage du code : PHP (php)

Résultat d’exécution

D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Résultat final : false
Langage du code : PHP (php)

Même si fun1 contient des erreurs ou exceptions, celles-ci ne se produiront pas car la fonction n’est jamais appelée.

Exemple d’utilisation de l’ET logique

void main() {
  String name = 'admin';
  String password = '123321';

  // && : les deux côtés doivent être true pour valider la condition
  if (name=='admin' && password =='456654') {
    print("Connexion réussie");
  } else {
    print("Identifiant ou mot de passe incorrect");
  }
}Langage du code : JavaScript (javascript)

Résultat d’exécution

D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Identifiant ou mot de passe incorrectLangage du code : CSS (css)

3. OU logique ||

Si le côté gauche vaut true, le code du côté droit n’est pas exécuté et la fonction renvoie immédiatement true.

ExpressionRésultat
true || truetrue
true || falsetrue
false || truetrue
false || falsefalse

Voyons un exemple

void main() {
  bool fun1() {
    print("Exécution de la fonction");
    return true;
  }
  // Côté gauche à true : évaluation paresseuse, fun1() ne tourne pas
  bool res = true || fun1();
  print(res); // true
}Langage du code : PHP (php)

Le côté gauche du || vaut true, donc fun1 du côté droit n’est pas exécutée.

Avec deux interrupteurs, si au moins l’un d’eux est fermé (true), la lampe s’allume (true).

void main() {
        bool isParentAgree = true;
	int age = 12;
	if(age>=13 || isParentAgree){
	  print("Accès autorisé");
	}
}Langage du code : JavaScript (javascript)

Synthèse

A && B : si A vaut false, renvoie directement false, B n’est pas évalué ni exécuté

A || B : si A vaut true, renvoie directement true, B n’est pas évalué ni exécuté

Cela améliore les performances et permet d’éviter les erreurs (très utilisé pour les vérifications de null)

Exemple :

String? name;
// On accède à length uniquement si name n'est pas null ; l'évaluation paresseuse évite une erreur de null
if(name != null && name.length > 0) 
{

}Langage du code : JavaScript (javascript)

Si on appelait directement name.length, une erreur surviendrait car name vaut null et ne possède pas la propriété length. Grâce à la vérification name != null en premier, si name est null la première condition est false et le reste n’est pas exécuté : pas d’erreur.

Priorité des trois opérateurs logiques

! > && > ||

Comme pour les calculs mathématiques, les opérateurs à priorité élevée sont calculés en premier. Utilisez des parenthèses () pour modifier l’ordre des opérations.

if (!done && (col == 0 || col == 3)) {
  // ...Traiter une action...
}Langage du code : JavaScript (javascript)

Ordre de calcul détaillé :

  1. À l’intérieur des parenthèses : calcul de col == 0 || col == 3 (vérifie si la colonne est 0 ou 3)
  2. Application du NON sur !done
  3. Combinaison des deux résultats avec l’opérateur &&

Exemple

void main() {
  bool done = false;
  int col = 3;

  // Exemple officiel
  if (!done && (col == 0 || col == 3)) {
    print("Exécution logique : non terminé et colonne 0 ou 3");
  }

  // Démonstration du NON logique !
  bool isFinish = true;
  print(!isFinish); // false

  // Démonstration ET logique &&
  int a = 10, b = 20;
  if (a > 5 && b > 10) {
    print("a supérieur à 5 ET b supérieur à 10");
  }

  // Démonstration OU logique ||
  int score = 55;
  if (score < 60 || score > 90) {
    print("Note insuffisante OU excellente note");
  }

  // Démonstration évaluation paresseuse
  bool func() {
    print("La fonction s'exécute");
    return true;
  }
  false && func(); // Côté gauche false, func ne s'affiche pas
  true || func(); // Côté gauche true, func ne s'affiche pas
}Langage du code : PHP (php)

Résultat d’exécution

D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Exécution logique : non terminé et colonne 0 ou 3
false
a supérieur à 5 ET b supérieur à 10
Note insuffisante OU excellente noteLangage du code : JavaScript (javascript)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *