Accede a todo EDteam con un único pago¡Sube a premium!

¿Qué son los lenguajes tipados y no tipados? (Explicación sencilla)

En este blog te explicaremos de forma sencilla y clara, qué son y cuáles son las diferencias entre los lenguajes tipados y no tipados.

Diseño web
8 minutos
Hace un año
¿Qué son los lenguajes tipados y no tipados? (Explicación sencilla)

¡Accede a cientos de cursos
con solo un pago al año!

Blog Microbanner

La programación consiste en hacer operaciones con datos: operaciones con números, operaciones con textos y condicionales. Con algunas pocas de estas operaciones, o con millones de ellas, depende de que tan complejo sea tu proyecto, tienes una app.

Pero los datos no son todos iguales, puedes sumar dos números, pero no un número y un texto. Esto introduce el concepto de tipado en la programación. Es decir, diferenciar los tipos de datos para saber qué operaciones podemos y no podemos hacer con ellos. Y según como los lenguajes manejen los tipos, podemos clasificarlos en diferentes categorías: como lenguajes tipados y no tipados, estáticamente tipados y dinámicamente tipados, débilmente tipados y fuertemente tipados.

¿Qué? ¿Son sinónimos? ¿O son cosas diferentes?

Hoy por fin vas a entender este trabalenguas de lenguajes, porque tú sabes que la tecnología es fácil con EDteam.

1. Tipo de datos

Como ya te dije, no todos los datos son iguales, sino que se clasifican en tipos. Los tipos básicos de datos en la programación son tres: números, textos y booleans.

Los números no requieren mayor explicación: tu año de nacimiento, tu número de teléfono, la duración de este video. Los textos tampoco tienen misterio: "Hola EDteam” es un texto, el título de este video es un texto. En la programación a los textos les llamamos strings o cadenas.

Por último están los booleans que son datos que solo toman dos valores: verdadero (true) o falso (false) y sirven para que el programa tome decisiones. Por ejemplo, si quieres ver tus cursos en EDteam ingresas tu usuario y contraseña, el sistema los evalúa y devuelve true si son correctos y te deja ingresar. O devuelve false si son incorrectos y no te deja ingresar.

Estos tres tipos de datos (número, texto y boolean) se conocen como primitivos porque son los básicos de cada lenguaje. Aunque algunos lenguajes tienen varios tipos de número y varios tipos de textos. Sin embargo, no nos desviemos, ese es otro tema.

Ahora, los tipos de datos primitivos pueden agruparse en otros tipos llamados estructuras de datos y cada lenguaje tiene sus propias estructuras como: objetos, arrays, listas, colas, tuplas, grafos, etc.

Si quieres saber un poco más de los datos y tips de datos te recomiendo nuestro curso gratuito Programación desde cero. El mejor curso en español para aprender a programar si quieres comenzar realmente desde cero.

2. Lenguajes tipados y no tipados

Ahora que ya sabes qué son los tipos de datos, lo siguiente que debes saber es que cada lenguaje los maneja de forma diferente y la clasificación más común que se suele hacer es la de lenguajes tipados y no tipados.

Los lenguajes tipados son los que exigen que se declare el tipo de dato en las variables, estructura de datos o funciones. Si no lo haces, error.

Por ejemplo en Go:

go-codigooo.png

O en Java:

java codigooo.png

Mientras que en los lenguajes no tipados no se necesita declarar el tipo de dato, sino que el intérprete (o el compilador) lo deduce.

Por ejemplo en Python:

python coodigo.png

O en JavaScript:

javascript codigoo.png

Si ya tienes experiencia programando seguro estarás levantando una ceja y pensando: en Go tengo la opción de declarar el tipo de dato o no hacerlo. Entonces, ¿es tipado o no? Mientras que en Python también, si lo necesito puedo especificar el tipo de dato. ¿Entonces?

Sucede que diferenciar por tipado o no tipado es más una jerga de programadores que una clasificación exacta. Porque estrictamente hablando, no existen lenguajes no tipados, ya que todos los lenguajes manejan tipos, los escribas o no. Números, textos, booleans, estructuras, ¿te acuerdas?

En lugar de decir lenguaje tipado y no tipado, lo correcto es hablar de lenguajes estáticamente tipados y dinámicamente tipados.

3. Tipado estático y tipado dinámico

Si un lenguaje te exige que declares los tipos de datos, o te da la opción de no hacerlo, es un tema de sintaxis y no de cómo el lenguaje maneja los datos en su compilación y en su ejecución. Así que una clasificación correcta es entre tipado estático y tipado dinámico.

En los lenguajes estáticamente tipados no se puede cambiar el tipo de dato. Es decir, que si una variable almacena un número, más adelante en el programa no puede almacenar un texto. Por ejemplo en Go:

Tipado en Go.png

En estos lenguajes los tipos se verifican en tiempo de compilación, con lo cual los posibles errores se descubren antes de ejecutar el código (porque no compila). Su nombre lo dice todo: estáticos.

Otros ejemplos de lenguajes estáticamente tipados son Java, C#, C y C++, TypeScript o Kotlin (y los puedes aprender en EDteam).

En el caso de los lenguajes dinámicamente tipados, su nombre también nos da un spoiler de cómo se comportan (dinámicos). En estos lenguajes las variables pueden cambiar de tipo de dato. Una variable puede ser número, luego texto, luego boolean y no pasa nada. Por ejemplo en Python:

Tipado en Python.png

Otra diferencia es que los lenguajes dinámicamente tipados verifican los tipos, estos verifican los tipos en tiempo de ejecución, o sea, cuando el programa ya está en funcionamiento. Lo que significa que es más probable descubrir errores demasiado tarde (o requerir mayor testing para mitigarlos).

Otros lenguajes dinámicamente tipados son JavaScript, PHP o Ruby (y también los puedes aprender en EDteam).

Como anécdota, esta fue una de las razones de Anders Hejlsberg y el equipo en Microsoft para crear TypeScript, pues JavaScript es dinámicamente tipado y cuando los proyectos crecen es muy difícil corregir errores. Si quieres saber más de la historia de TypeScript, mira este video.

4. Tipado fuerte y tipado débil

Además del tipado estático y dinámico, otra clasificación común es el tipado fuerte y el tipado débil, que se refiere a que tan estricto o permisivo es un lenguaje al momento de cambiar un tipo de dato.

Cambiar un tipo de dato por otro es un proceso que en programación se conoce como casting y puede hacerse tanto en lenguajes de tipado estático como en lenguajes de tipado dinámico.

Espera… ¿Cambiar el tipo de dato en un lenguaje de tipado estático? ¿No que eso no se podía?

Es verdad, no se puede cambiar el tipo de dato tan solo asignando un valor diferente a una variable, pero existen casos excepcionales en que se necesita hacer una conversión de tipos, por ejemplo al hacer operaciones con un número entero y uno decimal (de punto flotante). Y en esos casos los lenguajes tienen un mecanismo explícito que hay que respetar para hacer el cambio. Por ejemplo en Go:

codigo goo.png

A esto nos referimos con tipado fuerte, puesto que el lenguaje es muy estricto con la forma para cambiar el tipo de dato y te rechaza el cambio si no cumples sus reglas.

Por otro lado, tenemos el tipado débil, que permite cambiar el tipo de dato “al vuelo” sin tener que hacer un cambio explícito. Por ejemplo en PHP:

carbon (1).png

Como ves, PHP hace la conversión de datos al vuelo para sumar el número 1 y el texto “1”. Por eso su tipado es débil.

5. Tipos de lenguajes

En este punto, tenemos dos formas de clasificar los lenguajes: por tipado estático y tipado dinámico, por un lado, y por tipado fuerte y tipado débil, por otro. Así que podemos dibujar un sistema de coordenadas donde el eje vertical sea el tipado estático y dinámico y el eje horizontal sea el tipado fuerte y débil

¿Dónde se ubica cada lenguaje?

Comencemos con Java.

Java es estáticamente tipado, así que va para arriba, y como ningún lenguaje de tipado estático tiene tipado débil (sería una contradicción total), Java está a la derecha. En el cuadrante 1.

Con C# es fácil porque también es un lenguaje estáticamente y fuertemente tipado. Cuadrante 1.

Go también es estáticamente tipado y fuertemente tipado. Como ves, no hay misterio con los lenguajes estáticamente tipados, deben ser fuertemente tipados a la vez. Lo interesante viene con los dinámicamente tipados.

PHP es dinámicamente tipado, y a la vez de tipado débil como vimos en el ejemplo anterior. Con JavaScript sucede lo mismo, tipado dinámico y débil.

Pero Python es diferente, pues aunque es dinámicamente tipado, no permite hacer conversiones de datos al vuelo, ya que el siguiente código da error:

carbon (2).png

Para que funcione hay que cambiar de forma explícita el tipo de dato, así:

Print Python 2.png

6. Inferencia de tipos

Para terminar con este tema, ¿te acuerdas de que al inicio hablamos de los lenguajes que te exigen declarar el tipo de dato y los que no te lo exigen?

Pues hay lenguajes que tienen ambas formas. Puedes declarar el tipo de dato explícitamente o puedes no hacerlo y dejar que el lenguaje lo infiera por la sintaxis. Por ejemplo, en Go ambas formas de declarar la variable edad son válidas:

carbon.png

Mientras que en Python, también tienes dos formas de declarar la variable edad:

python codigo.png

Recuerda que esto es solo sintaxis y no significa que el lenguaje maneje los datos de forma diferente. Go sigue siendo un lenguaje estáticamente tipado, pero con inferencia de tipos, mientras que Python sigue siendo un lenguaje dinámicamente tipado. Pero con inferencia de tipos.

Inferencia de tipos, como debes haber notado, significa que el lenguaje (compilador o interprete) infiere o deduce el tipo de dato sin que se lo digas explícitamente.

En resumen

Vamos a resumírtelo para que puedas recordarlo fácilmente:

  1. Lenguajes estáticamente tipados: no permiten cambiar el tipo de datos de las variables y se comprueban los tipos en la compilación.
  2. Lenguajes dinámicamente tipados: si permiten cambiar el tipo de datos de las variables y los tipos se comprueban en la ejecución.
  3. Lenguajes fuertemente tipados: para cambiar el tipo de dato (en casos excepcionales) se deben seguir reglas estrictas
  4. Lenguajes débilmente tipados: pueden cambiar de tipos de datos “al vuelo”.
  5. Inferencia de tipos: es cuando el lenguaje puede deducir el tipo de dato aunque no se haya declarado explícitamente. Pero es solo un tema de sintaxis y no cambia la forma en que el lenguaje maneja los datos.

Espero que con este blog no vuelvas a tener dudas sobre los tipos de lenguaje y los tipos de datos. Ahora, el siguiente paso, es comenzar a aprender a programar (si todavía no lo has hecho). Para eso, tenemos en mejor curso en español, con los mejores profesores: Programación desde cero. ¡Comprueba que la tecnología es fácil con EDteam!

Y si no sabías como se clasifican los lenguajes, #LoAprendisteEnEDteam.

Comentarios de los usuarios

Pregunta a ChatEDT