For faster navigation, this Iframe is preloading the Wikiwand page for Conversion de type.

Conversion de type

En informatique la conversion de type est le fait de convertir une valeur d'un type (source) dans un autre (cible). On parle aussi de coercition ou de cast. On distingue trois types de conversion (dont un seul mérite vraiment le nom de conversion) suivant la relation de sous-typage existant entre les types source et cible :

  • la conversion entre types incomparables ;
  • la coercition ascendante (transtypage vers le haut) ;
  • la coercition descendante (transtypage vers le bas).

Conversion entre types incomparables

C'est la coercition la plus ancienne historiquement. Elle consiste (généralement) à transformer physiquement la représentation binaire d'une variable pour la faire correspondre au type de la cible. En langage C, la conversion d'une variable de type entier (usuellement codé en complément à deux) vers un type réel (usuellement codé selon la norme IEEE) est un exemple de ce genre de conversion. Elle est à manier avec prudence car elle n'est pas toujours possible et peut amener des résultats non prévus.

Coercition ascendante

Dans le cadre d'un langage objet, la coercition ascendante permet de prendre une instance de la sous-classe pour une instance directe de la super-classe. Cela peut servir à empêcher l'utilisation d'une méthode m spécifique à la sous-classe B, pour la remplacer par la méthode m d'une super-classe A (en considérant bien sûr que B est une sous-classe de A).

Dans d'autres langages utilisant le sous-typage, mais pas le mécanisme d'héritage, la coercition ascendante permet par exemple à une fonction d'accepter plusieurs types d'arguments, sous-types de l'argument déclaré.

Coercition descendante

Elle consiste à convertir le type statique de la valeur vers son type dynamique. Elle permet ainsi de faire réapparaître statiquement le type dynamique de l'objet. Elle est par exemple utilisée en Java lors de l'utilisation de collection.

Les coercitions ascendante et descendante ne sont pas une réelle conversion de type dans le sens où il n'y a pas de transformation physique de la valeur. Il s'agit essentiellement d'une indication donnée au compilateur sur la façon dont il doit compiler un certain envoi de message.

Un exemple

Une fonction d'addition pourrait accepter n'importe quelle valeur numérique. En supposant qu'il existe un type Numeric et deux de ses sous-types, Int et Double, voici un exemple de code utilisant les coercitions:

add(a: Numeric, b: Numeric): Numeric = a + b
a: Double = 1.2
b: Int = 3
res: Double = add(a,b) // res: Double = (Double)add((Numeric)a, (Numeric)b)

Notons que l'addition dans la fonction add nécessite probablement une conversion entre types incompatibles, que l'appel à la fonction utilise deux coercitions ascendantes et que l'affectation à res utilise la coercition descendante.

Voir aussi

{{bottomLinkPreText}} {{bottomLinkText}}
Conversion de type
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.