Évaluation paresseuse☘
Préambule n°1☘
On considère deux booléens a et b.
On sait que a = False
. Pour évaluer l'expression a \; et \; b, a-t-on besoin de connaître la valeur de b ? Expliquer.
Réponse
On rappelle la table du and
:
a | b | a and b |
---|---|---|
False |
False |
False |
False |
True |
False |
True |
False |
False |
True |
True |
True |
Lorsque a = False
, on a « a and
b = False
», quelle que soit la valeur de b.
Préambule n°2☘
On considère deux booléens a et b.
Pour évaluer l'expression a \; ou \; b, existe-t-il une valeur de a qui permet de ne pas connaître la valeur de b ? Expliquer.
Réponse
On rappelle la table du or
:
a | b | a or b |
---|---|---|
False |
False |
False |
False |
True |
True |
True |
False |
True |
True |
True |
True |
On voit qu'avec a = False
, la réponse dépend de la valeur de b.
Par contre avec a = True
, on a « a or
b = True
», quelle que soit la valeur de b.
Par conséquent, avec l'information a = True
, il n'est pas nécessaire de connaître la valeur de b pour déterminer la valeur de a \; ou \; b.
Court-circuit☘
Le langage Python (ainsi que d'autres langages) profite des conclusions précédentes pour évaluer une expression du type « a \; et \; b » ou une expression du type « a \; ou \; b ».
Ainsi, lorsque a vaut False
, la valeur de b n'est pas évaluée pour une expression du type « a \; et \; b ».
Vocabulaire
Ce type d'évaluation est un cas particulier de ce que l'on appelle évaluation paresseuse.
Pour traduire cette évaluation, on dit également que les opérateurs and
et or
sont des opérateurs séquentiels