Modérateur PHPfrance |
2575 Messages
28 août 2006, 12:32
Il faut faire attention au cas général de l'utilisation des opérateurs logiques et au cas particulier de l'exemple utilisé par notre ami (cas de l'usage d'une fonction (ici Print) ) pour ne pas se méler les pinceaux.
Le cas général:
------------------
La différence majeure entre les opérateurs
AND/OR/&/| et
&&/|| (doublés) est que :
Les opérateurs AND, OR, & et | de base:
1. - Pour ce premier groupe d'opérateurs, toutes les expressions logiques qui composent la condition sont vérifiées avant de prendre la décision d'un état vrai ou faux.
Exemple :
Code : Tout sélectionner
if (A==1 AND B==2 & C==3) { print "vrai";} else { print "faux"; }
Exécution:
Si on a :
A=1;
B=2;
C=3;
Cette alternative affiche "vrai" car toutes les expressions sont vraies et pour le savoir l'exécuteur a dù évaluer toutes les expressions composant la condition. En trouvant le résultat logique suivant :
VRAI AND VRAI & VRAI qui est égal à VRAI.
Et si on a :
A=0;
B=2;
C=3;
Cette alternative affiche "faux" car toutes les expressions ne sont pas vraies et pour le savoir l'exécuteur a dù évaluer toutes les expressions composant la condition. En trouvant le résultat logique suivant :
FAUX AND VRAI & VRAI qui est égal à FAUX.
Théorème :
- L'alternative évalue toutes les expression logiques combinée par les opérateurs logiques : AND, OR, & et | avant de décider de l'état VRAI ou FAUX.
En principe, l'ordre des expressions jointes obéie à la loi bijective et au lois de distributivité :
Bijectivité:
A AND B = B AND A
Distribution:
A AND (B OR C) = (A AND B) OR (A AND C)
A OR (B AND C) = (A OR B) AND (A OR C)
Voir les lois de Bool et de Morgan
Les opérateurs && et ||
2. - Ce deuxième groupe d'opérateurs est une variante du premier groupe de base et simplifie le méchanisme d'évaluation d'une condition composée d'une suite d'expressions logiques dépondantes fonctionnellement. C'est à dire que si une première expression de la suite n'est pas vraie il serait inutil d'évaluer le reste de la suite. La décision d'un état vrai se fait si toutes les expression de la suite sont varies et la décision d'un état faux se fait dès qu'une des expression de la suite est fausse.
Exemple :
Code : Tout sélectionner
if (i>=0 && i<count(tableau) && tableau[i] != null) { print "vrai";} else { print "faux"; }
Exécution:
Si on a :
tableau = array (1, 2, 3);
i=1;
Cette alternative affiche "vrai" car toutes les expressions sont vraies et pour le savoir l'exécuteur a dù évaluer toutes les expressions composant la condition. En trouvant le résultat logique suivant :
VRAI && VRAI && VRAI qui est égal à VRAI.
Ce qui est logique car puisque i est égal à 1 c'est un indice correct du tableau ce qui permet fonctionnellement d'accèder à la case n°1 du tableau sans erreur d'accès.
Et si on a :
tableau = array (1, 2, 3);
i=4;
Cette alternative affiche "faux" car au moins l'expression 2 est fausse puisque i n'est pas < à la taille du tableau (3) le reste de la condition n'est alors pas évalué (car logiqument inutil : la case n°4 n'existe pas dans tableau) La décision trouvée est prématurée :
VRAI && FAUX qui est égal à FAUX.
Ici l'exécuteur a économisé une évaluation dù à l'enchainement logique de dépondence entre les expressions tel que le programmeur l'a pensé.
Théorème :
- La condition de l'alternative est composée d'une suite d'expressions logiques dont l'ordre est important et détermine une certaine dépondence fonctionnelle entre les expressions.
L'alternative arrête la décision à FAUX pour && et à VRAI pour || dès qu'une expression composant la condition est fausse pour && et vraie pour ||
Attention, la dijection n'est pas tolérée logiquement car l'ordre établi par le programmeur entre les expressions obéi à une dépondence fonctionnelle que seul ce programmeur connait et donc :
A && B pourrait ne pas être équivalente à la logique de dépondence de B && A
Même remarque pour la distributivité entre && et ||
Conclusion:
Lorsque les expressions composant une condition sont liées par une dépondence fonctionnelle il vaudrait mieux utiliser les opérateurs doublés && et || pour programmer une situation sans erreurs
Dans le cas contraire, les opérateurs de base sont suffisants.
--------
//////----
//---
//----
//////
-------
//---
//----
//---
//----
//---
//
------
//////----
//////-----
//////
-----
||--------
||--
||---
||
Prendre le recul n'est pas une perte de temps.
ps:
Affrontez moi dans l'arène