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é.
France-IOI
