Il s'agit d'alléger les notations dans les structures conditionnelles (avec if) lorsque des blocs sont formés d'une seule instruction. Voici la règle :
begin instruction; end
se simplifie simplement en "instruction".
Par exemple :
let x = read_int() in if x = 4 then begin print_string "égal à 4"; end else begin print_string "différent de 4"; end ; print_newline();
Se réduit ainsi (attention aux points-virgules qui ont été retirés) :
let x = read_int() in if x = 4 then print_string "égal à 4" else print_string "différent de 4" ; print_newline();
Regardez bien le code précédent : la structure if then else ; prend 5 lignes. En programmation, le but est d'obtenir un code tel qu'on puisse comprendre le plus rapidement possible la structure du programme.
Dans une structure if, lorsque les blocs du then et du else sont réduits à une instruction chacun, on adopte la présentation suivante :
if (...condition...) then (...instruction du then...) else (...instruction du else...);
Dans notre exemple :
let x = read_int() in if x = 4 then print_string "égal à 4" else print_string "différent de 4"; print_newline();
Intérêts :
- Comme avant, les tabulations avant le
thenet leelsemontrent
que ces lignes ne sont pas forcément exécutés : leur exécution dépend de la condition.
- Comme avant, il y a une symétrie entre les divers cas possibles : soit l'instruction après le
- Maintenant, de plus, trois lignes suffisent.
then est exécutée, soit c'est celle après le else.
Inconvénient : il faut mettre un point virgule à la fin de la ligne du else, pour terminer la structure if, alors qu'il ne faut pas en mettre après le then. Cela nuit un peu à la symétrie du code, mais on ne va tout de même pas gâcher une ligne entière juste pour mettre un point virgule.
Si vous mettez un point-virgule en trop à la fin du bloc du then, vous obtiendrez une erreur sur le else :
let x = read_int() in if x = 4 then print_string "égal à 4"; else print_string "différent de 4";
File "test.ml", line 4, characters 3-7: Syntax error
Si au contraire vous oubliez le point-virgule après le else, vous obtiendrez un message d'erreur sur la ligne suivante.
France-IOI
