Symbole "NON"
Repartons (encore) de notre exemple concernant l'âge...
Cette fois-ci, nous ne voulons pas une variable booléenne "
majeur", mais une "
mineur" (qui sera
true pour un mineur et
false pour un majeur - extraordinaire, vous ne trouvez pas ?

).
Vous me dites : "facile, c'est vrai si l'âge est inférieur à 18 ans".
Certes, vous n'avez pas tort.
Sauf si je rajoute qu'il faut se servir de la condition élaborée pour la variable "
majeur", qui est la suivante :
Code : JavaScript1 | var majeur = (age >= 18);
|
Après longue réflexion, vous m'affirmez que c'est simplement l'opposé de cette condition.
On a ici "si l'âge est supérieur ou égal à 18 ans".
Mais on veut "si l'âge n'est
PAS supérieur ou égal à 18 ans".
Eh bien ce "
PAS" existe : il s'agit du symbole
! (comme j'ai pu vous l'annoncer avec le signe
!=, signifiant "pas égal").
Il
précède la condition, comme ceci :
Code : JavaScript1 | var mineur = !(age >= 18);
|
C'est tout

.
Enfin presque, j'allais oublier la table de vérité (certes toute simple) :
Théorème de De Morgan
Ça rappelle la SI
(Sciences de l'Ingénieur) du lycée... que de bons souvenirs

.
Bref, notez tout d'abord qu'il n'y a pas de faute de frappe, il s'agit bien du théorème de De Morgan.
Il nous vient d'un certain Auguste (ou Augustus) De Morgan, mathématicien britannique du dix-neuvième siècle, qui est, avec Boole (eh oui

), le fondateur de cette logique binaire (booléenne).
Mais ce qui nous intéresse maintenant plus particulièrement, ce sont les lois qu'il a formulées...
Plutôt que de vous les énoncer "bêtement", nous allons les retrouver ensemble.
Illustration
On sort de nos variables pour prendre un exemple concret.
Vous êtes végétariens : vous mangez de tout, sauf de la viande et du poisson (si ce n'est pas le cas, on va faire comme si

).
Vous arrivez à un repas, vous vous dites : "je mange s'il n'y a PAS de viande ET PAS de poisson".
Ou bien : "je mange s'il n'y a PAS : (du poisson OU de la viande)".
On aurait donc égalité entre ces deux expressions :
Code : Autre
Une petite table de vérité permet de vérifier ça :
| a | b | !(a || b) | !a && !b |
|---|
| 0 |
0 |
1 |
1 |
| 0 |
1 |
0 |
0 |
| 1 |
0 |
0 |
0 |
| 1 |
1 |
0 |
0 |
Et en inversant les opérateurs logiques
&& et
||, on obtient le même résultat.
Ce qui nous prouve les lois de De Morgan (formulées ici avec les notations du JS) :
Citation : lois de De Morgan1) !(a || b) = !a && !b
2) !(a && b) = !a || !b
(Notez qu'elle est également vérifiée avec 3 variables booléennes ou plus.)
On pourrait très bien s'en passer.
Tu nous compliques la vie pour pas grand chose !
Tout d'abord, ça permet de simplifier (moins de parenthèses) les conditions.
Et ça évite surtout cette erreur :
Code : Autre1
| !(a && b) est égal à !a && !b |