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
then
et leelse
montrent
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.