Tipado Débil vs Tipado Fuerte

¡Hola #Yobers!

Tras unas semanas hablándoos sobre diseño, damos el salto hacía el otro lado y en el artículo de hoy (como ya habréis podido leer en el título) os vamos a hablar sobre el Tipado Débil y el Tipado Fuerte.

Tal vez habéis oído hablar de ello cuando nos referimos a algún lenguaje de programación. Pero, hay una gran diferencia entre ambos tipos. Por ello, antes de nada, saber que cuando hablamos de “Tipado” nos referimos a cómo declaramos los tipos de variables. En algunas las podemos declarar como enteras y otras como cadena. Por ejemplo, en el tipado fuerte no podemos hacer operaciones entre objetos de distintos tipos, es decir, no podemos sumar una cadena más un entero, sin embargo, en el tipado débil esta operación sí se podría realizar, aunque hay todo un expectro de posibilidades, según cada lenguaje:

Gráfico de posicionamiento de cada lenguaje de programación

Tipado débil

No indicamos, la mayoría de las veces, el tipo de variable. Por ello, la gran diferencia entre el débil y el fuerte es que aquí podemos asignar, por ejemplo, un valor entero a una variable que anteriormente no tenía una cadena. Pero, no solo eso, también podemos operar con variables de distintos tipos:

La ventaja del tipado débil es que es mucho más rápido de desarollar, pero una clara desventaja es que podemos cometemos muchos más errores si no llevamos cuidado. Un lenguaje que usa tipado débil, por ejemplo, es Javascript. Quien infiere los tipos es el propio lenguaje, como podemos ver en el siguiente ejemplo:

1
2
3
4
5
6
7
8
9
const resultado = 3 + "hola"; // "3hola"
/* al intentar sumar un string y un número, el lenguaje intenta
 cambiar los tipos para poder realizar la operación */
 
const resultado2 = 5 + "23"; // "523"
/* Aunque haya un número en la cadena de texto,
el lenguaje lo suma como si fuesen cadenas los dos,
por eso hay que llevar más cuidado con este tipo de 
programación, ya que puede llevar a resultados inesperados*/

Tipado fuerte

Al contrario que en el tipado débil, aquí sí que nos obliga a indicar el tipo de dato al declarar la variable. Además, dicho tipo no puede ser cambiado una vez definida la variable nunca. No se podrá operar entre distintos tipos de forma implícita, nosotros como desarrolladores tendremos que hacer las conversiones necesarias de forma explícita.

Las ventajas del tipado fuerte es que es código más expresivo ahora sí podremos saber de qué tipo espera un argumento una función. También cometeremos menos errores, porque éste detecta errores antes que llegue al usuario final. Asimismo, se asume una ejecución mucho más rápida con este tipado, ya que la inferencia de tipos se ha hecho con anterioridad y el lenguaje no tendrá que comprobarlos en tiempo de ejecución. Las desventajas del tipado fuerte es que son mucho más estrictos a la hora de programar y que hay que escribir más código. Un lenguaje que usa tipado fuerte es Python. En él podrás comprobar que realizar la misma operación que anteriormente, Python no lo reconoce y, por lo tanto, no ejecuta la operación:

1
2
resultado = 3 + "hola"
# TypeError: unsupported operand type(s) for +: 'int' and 'str'

Por lo tanto, es muy difícil determinar qué tipado es mejor, cada uno es bueno o malo para cierto tipo de proyectos. Los de tipado fuerte son mucho más seguros, porque no permiten hacer operaciones con variable de distintos tipos y eso hace que no cometamos tantos errores, lo que puede ser conveniente para proyectos de gran envergadura. Pero, con el tipado débil podemos trabajar mucho más rápido, lo que permite obtener resultados antes, algo bueno cuando estamos en fase de ideación o de proyectos más pequeños.

En Estudio Yobo estuvimos realizando un proyecto para un cliente y lo hicimos en Tipado Débil, pero ahora lo hemos tenido que pasar a Tipado Fuerte, porque requiere una mantenibilidad de código y escalabilidad que con el tipado débil es muy complicado tener. Por ello, nosotros según de qué proyecto se trate usaremos un tipado u otro.

Tipado Dinámico y Tipado Estático

Comentar también la diferencia entre tipado estático y dinámico, que es en qué momento se comprueba la compatibilidad entre tipos. Mientras que el en tipado dinámico se comprueba en tiempo de ejecución, en el estático se comprueba una vez se compila el programa.

¡Eso es todo #Yobers!

Si todavía tenéis alguna duda sobre qué es mejor para tu próximo proyecto, no lo dudes, contacta con nosotros y te asesoraremos.

¡Nos leemos en el siguiente blog!