Diccionario

Tipado estático y dinámico

Cómo comprueba un lenguaje los tipos de datos: antes de ejecutar (estático, como Java o TypeScript) o mientras se ejecuta (dinámico, como Python o JavaScript).

Con tipado estático, cada variable tiene un tipo conocido al compilar y el compilador avisa si mezclas tipos incompatibles. Con tipado dinámico, los tipos se comprueban mientras el programa se ejecuta, así que el error aparece solo al llegar a esa línea.

Otra cosa distinta es si el lenguaje convierte tipos por su cuenta (tipado débil, como JavaScript al sumar "2" + 1) o se niega (tipado fuerte, como Python).

Un ejemplo

En TypeScript, pasar un texto a una función que espera un número se marca en rojo en el editor; en JavaScript el fallo solo aparece al ejecutar.

Por qué importa

La elección entre tipado estático y dinámico condiciona cómo trabajas. Con tipado estático, el compilador te avisa de muchos errores antes de ejecutar, y el editor puede autocompletar con precisión. Con tipado dinámico escribes menos y avanzas más rápido en prototipos, pero algunos fallos solo aparecen al ejecutar.

Por eso, en proyectos grandes ha crecido el uso de tipado opcional: TypeScript añade tipos a JavaScript y Python admite anotaciones de tipo que herramientas como mypy comprueban. Es una tendencia que conviene conocer porque es muy habitual en ofertas de trabajo.

Confusiones frecuentes

Es frecuente confundir tipado estático/dinámico con tipado fuerte/débil, que son ejes distintos. Python es dinámico pero fuerte: no suma "3" + 4, da error. JavaScript es dinámico y más permisivo: convierte tipos automáticamente. Java es estático y fuerte. Además, que un lenguaje sea de tipado dinámico no significa que las variables no tengan tipo, sino que el tipo pertenece al valor y se comprueba durante la ejecución.

Preguntas frecuentes

¿Qué tipado es mejor para empezar?

El dinámico suele ser más cómodo al principio, pero aprender un lenguaje estático te enseña a pensar en tipos y te evita muchos errores más adelante.

¿Qué es la inferencia de tipos?

Es cuando el compilador deduce el tipo sin que lo escribas, como var x = 5; en Java o C#, o let x = 5 en Rust. Sigue siendo tipado estático.