Introducción

Tal vez hemos escuchado que algunos lenguajes de programación son de tipado fuerte y otros de tipado débil. Hay una gran diferencia entre ambos tipos. Normalmente el tipado débil es el más criticado de todos, pero también es querido por muchos. Aquí daré una pequeña explicación.

Para comenzar, debemos saber que el tipado se refiere a cómo declaramos los tipos de variables. Por ejemplo, algunas las declaramos como enteras, algunas otras como cadena, flotantes, etcétera. Y en algunos lenguajes, no necesitamos declarar el tipo, pues éste se adivina.

Por otro lado, el tipado fuerte no permite hacer operaciones entre objetos de distintos tipos. No podemos sumar una cadena mas un entero. En cambio, en los débilmente tipados sí.

Tipado débil

La mayoría de veces, el tipado débil es en donde no indicamos el tipo de variable al declararla. La verdadera diferencia es que podemos asignar, por ejemplo, un valor entero a una variable que anteriormente tenía una cadena.

También podemos operar aritméticamente con variables de distintos tipos. Por ejemplo, sumar “x” + 5.

Ventajas

  • Nos olvidamos de declarar el tipo
  • Podemos cambiar el tipo de la variable sobre la marcha. Por ejemplo, asignarle un string a un int
  • Escribimos menos código

Desventajas

  • Al hacer operaciones, a veces éstas salen mal. Por ejemplo, puede que intentemos sumar 500 + “400.00” + 10, cosa que será errónea
  • Especialmente en Javascript, he notado que hay errores al comparar números que creemos que son números, pero no lo son. Por ejemplo, algo como “20” > “100” dará como resultado true, ya que son comparados como cadena, no como números.
  • Hay que castear muchas veces. En ocasiones, tendremos que castear forzosamente las variables para que se comporten como queremos y no generen errores como los mencionados arriba.
  • Código menos expresivo. Al declarar los argumentos de una función no sabemos si ésta espera un flotante, un entero, un string, etcétera. Tenemos que ir a la función, ver lo que hace e inferir el tipo de variable que espera
  • Inseguridad: existe la posibilidad de que un atacante descubra una vulnerabilidad en donde nosotros esperemos una variable de determinado tipo pero se reciba otra

Lenguajes que lo usan

  • PHP
  • Javascript

Ejemplo

Veamos lo que pasa en JavaScript cuando hacemos la siguiente operación:

En un lenguaje fuertemente tipado daría un error, pero en JavaScript no pasa nada:

Tipado fuerte

Aquí es en donde indicamos el tipo de dato al declarar la variable. Dicho tipo no puede ser cambiado nunca. Y no podemos operar entre distintos tipos.

Ventajas

  • Código expresivo: ahora sí sabremos de qué tipo espera un argumento una función
  • Menos errores: Nos olvidaremos de ver el tipo de variable antes de hacer operaciones con ésta

Desventajas

  • Escribir más codigo: tenemos que declarar el tipo de variable al declararla

Lenguajes que lo usan

Por mencionar algunos…

  • C
  • C#
  • Java
  • Ruby
  • Python

Ejemplo

Intentemos realizar la operación de “x” + 5 en Python, y veamos lo que pasa:

Conclusión

Es un poco difícil determinar los de tipado débil y los de tipado fuerte. Los de tipado fuerte son más seguros, pues no permiten hacer operaciones con variables de distintos tipos.

Personalmente preferiría que todos fueran de tipado fuerte. Si no nos queda otra opción, simplemente hay que castear o comprobar el tipo cada vez que trabajemos con una variable. Afortunadamente tenemos funciones como gettype, settype, typeof, etcétera.

Además, algunos lenguajes (como PHP) están introduciendo un tipado fuerte al declarar funciones. De todos modos, al final todo depende del programador, pues éste se encarga de que el código funcione.

Estoy interesado en trabajar contigo de manera remota para llevar tu idea a la realidad, formar parte de tu equipo de desarrolladores, ayudarte con tu tarea, dar asesorías y todo lo relacionado con tecnología y programación. Contáctame para más información
No te vayas sin seguirme en Twitter, Facebook y GitHub
Si tienes dudas déjalas en un comentario, pero asegúrate de seguirme antes como agradecimiento (no te cuesta nada y me ayudas mucho)

Categorías: Sin categoría

parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB. Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron. Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scripts La plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C. Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

9 Comments

Blue · junio 27, 2018 a las 6:19 am

Pero si según Wikipedia, Python es de tipado fuerte.

    parzibyte · junio 28, 2018 a las 10:26 am

    Tienes razón. Ya he editado el artículo 🙂

Notación Yoda en programación: explicación - Parzibyte's blog · septiembre 24, 2018 a las 6:25 pm

[…] El tercero es el de identidad, y sólo es usado (que yo sepa) en JavaScript y PHP por eso del tipado débil. […]

GraphQL contra REST: una introducción - Parzibyte's blog · septiembre 25, 2018 a las 3:59 pm

[…] le decimos que queremos la mascota en donde el id sea 1. Es importante notar desde aquí el tipado fuerte, pues le pasamos un entero. Si fuera una cadena la pondríamos entre […]

PHP: intval y strval para convertir variables - Parzibyte's blog · octubre 3, 2018 a las 6:15 pm

[…] es un lenguaje débilmente tipado, aunque en la versión 7 incorporó la revisión de tipos en las funciones el lenguaje en sí lo […]

Funciones con chequeo de tipos en PHP 7 - Parzibyte's blog · octubre 4, 2018 a las 11:23 pm

[…] que PHP es de tipado débil así que definimos una función de esta […]

Búsqueda secuencial en arreglo de PHP - Parzibyte's blog · octubre 12, 2018 a las 11:39 pm

[…] que PHP es un lenguaje de tipado débil, por eso el tercer parámetro de esta función es un booleano indicando si queremos que la […]

Codificar y decodificar JSON con JavaScript - Parzibyte's blog · diciembre 24, 2018 a las 12:08 am

[…] el primer ejemplo, devuelve un objeto. En el segundo, un arreglo. No debemos preocuparnos, pues JavaScript se encarga de definir el tipo de dato de la variable. Ahí lo hicimos con objetos y arreglos, pero puede ser igualmente con […]

Codificar y decodificar JSON con Ruby - Parzibyte's blog · febrero 13, 2019 a las 5:02 am

[…] lenguajes de programación (incluso los fuertemente tipados como Go) lo han implementado y Ruby no es la […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: