Dans les structures conditionnelles qu'on a eu jusqu'à maintenant, il y avait toujours un simple test. Exemple :
let x = read_int() in if x > 5 then print_string "supérieur" else print_string "inférieur";
La condition est ici x > 5
entre le if
et le then
. Le résultat de ce test est soit vrai, soit faux. En anglais, on dit true
ou false
. Une valeur de cette nature est dite "booléenne"
, et il y correspond le type "bool"
.
Une valeur booléenne est une valeur comme une autre. Rien n'empêche de lui donner un nom. Dans cet exemple, on appelle b
le booléen associé à la réponse à la question "est-ce que x est strictement plus grand que 5 ?"
, qui s'écrit en Caml (x > 5)
.
let x = read_int() in let b = (x > 5) in ...
Remarque : on a placé le test x > 5
entre parenthèses. C'est un choix de présentation. Pourquoi des parenthèses ? Supposez que l'on souhaite tester si x vaut 5 ou non. Sans les parenthèses, cela donnerait let b = x = 5 in ...
ce qui serait visuellement très déroutant, à cause de la présence de plusieurs signes d'égalité qui ont des significations différentes.
On peut aussi utiliser directement les valeurs true
et false
pour construire un booléen. Exemple :
let b = true in ...
Une valeur booléenne (bool
) vaut true
ou false
, et peut se construire avec des tests comparatifs.
Revenons aux structures de décision :
La condition d'un if
est toujours une expression de type bool
.
Voici un programme équivalent au premier du chapitre. La seule différence est qu'on a posé b
la valeur booléenne (x > 5)
. Ce booléen b
détermine ensuite le comportement du if
.
let x = read_int() in let b = (x > 5) in if b then print_string "supérieur" else print_string "inférieur";
Que pensez-vous du code suivant ?
if false then print_string "ahh" else print_string "ohh";
Réponse : il est équivalent à print_string "ohh";
, puisque c'est toujours le bloc du else
qui est effectué.