Unit et entrées/sorties

Un article de Mangue.org, l'encyclopéde libre.

Ce cours présente beaucoup de nouveautés. Vous y découvrirez le type unit que vous voyiez de plus en plus souvent apparaître dans les exemples sans vraiment le connaître. Nous allons aussi apprendre à faire des entrées / sorties dans nos programmes.


Sommaire

Le type unit

Le type unit correspond en fait à toutes les expressions qui ne peuvent pas être utilisées dans les calculs. Ce sont les effets de bord ; sous ce terme un peu obscur se cachent tout simplement les entrées/sorties et les opérations de manipulation de la mémoire.


Vous verrez donc apparaître ce mystérieux () dans la définition de certaines fonctions ou même dans l'évaluation d'expressions ne renvoyant aucun résultat. Souvenez vous lorsque nous avons utilisé les fonctions trace et untrace sur des fonctions récursives par exemple, le résultat renvoyé était bien () de type unit.


La séquence


# 0; 1; 2; 3 ;;
Toplevel input:
> 0; 1; 2; 3 ;;
> ^
Warning: this expression has type int,
but is used with type unit.
Toplevel input:
> 0; 1; 2; 3 ;;
>    ^
Warning: this expression has type int,
but is used with type unit.
Toplevel input:
> 0; 1; 2; 3 ;;
>       ^
Warning: this expression has type int,
but is used with type unit.
- : int = 3
# (); 1.1 ;;
- : float = 1.1
# 1 + 0.0; 2 ;;
Toplevel input:
> 1 + 0.0; 2 ;;
>     ^^^
This expression has type float,
but is used with type int.

Remarque
Expression ou Instruction : On peut parler d'instruction dans un programme, et non plus d'expression dès qu'on fait intervenir des expressions de type unit.




Les fonctions d'entrées / sorties

Il est possible d'afficher des données aucours de l'exécution de votre programme. Sans pour autant renvoyer de valeurs en résultat de vos fonctions. Les fonctions permettant d'afficher des données sont nombreuses, il en existe une pour chaque type de base du langage et vous êtes invités à en écrire pour chacun des types que vous allez créer en Caml.

Il est innutile de tenir un long discours à ce sujet... Ces quelques exemples vous présentent les fonctions que vous utiliserez par la suite. Elles prennent simplement en argument la valeur à afficher et renvoient en retour un () de type unit. C'est pourquoi nous pouvons les enchaîner dans des séquences :

# print_int (1);
  print_newline();
  print_float (0.0);
  print_string " Rahhh ça marche ! ";
  print_char (`\n`) ;;
1
0.0 Rahhh ça marche ! 
- : unit = ()

La fonction print_newline prends en argument une valeur de type unit. Simplement parce qu'elle n'a besoin d'aucun argument, son rôle est d'insérer un retour-chariot. En pratique cette fonction est gtrès peu utilisée, on la remplace souvent par des séquences d'échappements (que vous verrez en annexe) ou bien par la fonction print_endline pour les chaînes de caractères. print_endline affiche la chaîne de caractère qu'elle prends en argument suivie d'un retour à la ligne.

Astuce
Le \n est bien un caractère. Celui-ci est équivalent au retour chariot. Pour en savoir plus sur ce caractère, lisez l'annexe sur les séquences d'échappement !


Exercice

Voilà un problème à résoudre (corrigé en annexe)... Ecrivez une fonction de conversion des francs en Euros (même si à l'heure actuelle on en a plus vraiment besoin). Cette fonction prendra en argument le prix en franc. Affichera le taux de conversion et renverra le prix en Euros. Voilà un exemple de son exécution :

Outils personels