Conversion de type
Transformer une valeur d'un type de données en un autre — soit parce que le programmeur l'a demandé, soit parce que le langage l'a fait dans son dos.
La distinction intéressante est celle entre explicite et implicite. Une conversion explicite est un cast : int(3.7), (double)x, Integer.parseInt(s) — le programmeur assume la responsabilité de l'information perdue. Une conversion implicite, généralement appelée coercition, se produit automatiquement quand le langage rencontre des types incompatibles et devine ce qu'on voulait dire.
Ces devinettes sont une source classique de bugs. En JavaScript, "5" + 3 donne "53" alors que "5" - 3 donne 2, car + préfère les chaînes et - ne le peut pas. Convertir entre entiers de largeurs différentes fait disparaître silencieusement les bits de poids fort, un flottant converti en entier est tronqué et non arrondi, et les grands entiers perdent en précision dans un double. Les langages fortement typés préfèrent refuser de compiler.