Utilité des conversions

Dans un programme, dans un contexte où l'on attend une valeur d'un certain type, il faut normalement fournir une valeur de ce type. Par exemple, si la partie gauche d'une affectation est de type flottant, la valeur fournie en partie droite doit également être de type flottant. Il est cependant agréable de ne pas être trop strict sur cette règle. Si le type attendu et le type de la valeur fournie sont trop différents, (on attend un flottant et on fournit une structure), il est normal que le compilateur considère qu'il s'agit d'une erreur du programmeur. Si par contre, le type attendu et le type de la valeur fournie sont assez « proches », c'est une facilité agréable que le compilateur fasse lui-même la conversion. On peut admettre par exemple, que dans un contexte où on attend un nombre flottant, on puisse fournir un nombre entier.

Autre situation où les conversions sont utiles : les expressions. Les machines physiques sur lesquelles s'exécutent les programmes comportent des instructions différentes pour réaliser de l'arithmétique sur les entiers et sur les flottants. Cette situation se retrouve dans les langages de programmation de bas niveau (les assembleurs) où le programmeur doit utiliser des opérateurs différents pour réaliser la même opération (au sens mathématique du terme) selon qu'elle porte sur des entiers ou des flottants.Les langages de programmation de haut niveau par contre, surchargent les symboles des opérateurs arithmétiques de manière à ce que le même symbole puisse réaliser une opération indifféremment entre entiers ou entre flottants : le symbole + permet de réaliser l'addition de deux entiers ou deux flottants. Ceci est déjà une facilité agréable, mais il est possible d'aller plus loin. Le langage peut autoriser le programmeur à donner aux opérateurs des opérandes de types différents, charge au compilateur de faire une conversion de type sur l'un ou l'autre des opérandes pour les amener à un type commun.

Enfin, il se peut que le langage offre au programmeur la possibilité de demander explicitement une conversion de type : si le langage PASCAL n'offre pas une telle possibilité, le langage C par contre dispose d'un opérateur de conversion de type.

Matthieu Moy 2017-02-08