Conversión de tipos
Transformar un valor de un tipo de dato a otro — porque el programador lo pidió, o porque el lenguaje lo hizo sin avisar.
La distinción interesante es entre conversión explícita e implícita. Una conversión explícita es un cast: int(3.7), (double)x, Integer.parseInt(s) — el programador asume la responsabilidad de que se pueda perder información. Una conversión implícita, la llamada coerción, ocurre automáticamente cuando el lenguaje se encuentra con tipos que no encajan y adivina qué se quería decir.
Esas suposiciones son una fuente clásica de errores. En JavaScript, "5" + 3 da "53" mientras que "5" - 3 da 2, porque + prefiere las cadenas y - no puede trabajar con ellas. Convertir entre enteros de distinto tamaño descarta en silencio los bits más altos, pasar de flotante a entero trunca en lugar de redondear, y los enteros grandes pierden precisión al convertirse en double. Los lenguajes de tipado estricto prefieren directamente negarse a compilar.