Aller au contenu

É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