Tiene un punto perfectamente válido, existen idiomas que no realizan un seguimiento del tipo de una variable y se denominan "de tipo dinámico". La categoría incluye lenguajes como JavaScript, Perl, Lisp y Python.
La ventaja que obtenemos de un lenguaje de tipo estático es una comprobación adicional de errores en tiempo de compilación.
Supongamos, por ejemplo, que tiene el siguiente método:
public addCustomerContact(Customer client, Employee contact) {
...
}
Sería posible, si tiene un cliente bob
y un empleado james
en su código, llamar por error addCustomerContact(james, bob)
, lo que no es válido. Pero si el compilador no conoce los tipos de variables, no puede advertirle que ha realizado una llamada no válida, en su lugar, se produce un error en tiempo de ejecución ... y dado que los lenguajes de tipo dinámico no comprueban tipo de parámetros pasados a los métodos, ese problema ocurre cada vez que su código intenta usar propiedades del james
objeto solo para clientes o propiedades del objeto solo para empleados bob
. Eso puede ser mucho después de que el par (james, bob) se haya agregado a la lista de contactos de clientes.
Ahora, se preguntarán, ¿por qué el compilador aún no puede inferir el tipo de james
y bob
, y todavía nos advierte? Eso a veces puede ser posible, pero si las variables realmente no tienen tipo, entonces podríamos hacer lo siguiente:
var james;
var bob;
if (getRandomNumber() > 0.5) {
james = new Customer();
bob = new Employee();
} else {
james = new Employee();
bob = new Customer();
}
Es perfectamente legal asignar cualquier valor a cualquier variable, ya que dijimos que las variables no tienen tipo. Eso también significa que no siempre podemos conocer el tipo de una variable, porque podría ser de diferentes tipos en función de diferentes rutas de ejecución.
En general, los lenguajes de tipo dinámico se utilizan para los lenguajes de secuencias de comandos, donde no hay un paso de compilación, por lo que no existen errores de compilación, lo que significa que las pulsaciones de teclas adicionales necesarias para dar el tipo de variables no serían muy útiles.
También hay algunas ventajas distintas para los lenguajes de tipo dinámico, principalmente en términos de que se necesita menos código para implementar el mismo diseño: las interfaces no necesitan estar escritas, porque todo está "tipado en pato" (solo nos importa qué métodos / propiedades tiene un objeto) , no a qué clase pertenece el objeto), no es necesario que las variables tengan un tipo explícito ... con el compromiso de que descubrimos unos pocos errores antes de comenzar a ejecutar nuestro código.