Tipado dinámico
Publicado por caente en septiembre 10, 2007
De un tiempo a esta parte hay como una explosión de lenguajes de tipado dinámico, ruby, pyhthon(ya un poco veterano pero igual), groovy, etc. En los foros de java y C++ los desarrolladores tienden a despreciar o rechazar este tipo de tipado, para ellos (y durante un tiempo para mi también) hacer esto:
int x =1
era mejor que esto:
x=1
Pues da la impresión de seguridad, de saber lo que se está haciendo.
Inicialmente creía que la razón de los lenguajes de tipado estático era a causa de que en los 70′s y 80′s las computadoras no eran lo suficientemente veloces, y de alguna manera todos los lenguajes debían reservar memoria para cada variable, y saber el tipo es algo imprescindible para esto, pero luego me enteré que Smalltalk ya lo implementaba desde el principio, por lo que deduzco, y esto es una presunción mía, que el “gran culpable” de los prejuicios actuales sobre el tipado es C/C++, quien por su características de lenguaje de medio/bajo nivel sí implementa esta característica, así como el infierno de los punteros, y cero gestión de la memoria. Me imagino también que cuando surgió java habrán habido reticencias para aceptar que todos los objetos se pasen como refenrencias, pues incluso creo que el gnusmalltalk usa punteros (!).
Fuera de reservar espacio en la memoria, la otra razón para los tipos es la misma de los conjuntos matemáticos, es decir, un conjunto es un grupo de elementos que comparte propiedades, los cuales responden de la misma manera a ciertos eventos, etc. Bien, pero en la programación esto lo hace el compilador o intérprete, a nosotros como personas nos basta decir que:
x=2
y = x* 4
y==8
algunos podrían objetar que a la hora de la legibilidad este codigo es deficiente, pero si lo que se quiere es decir que x es un entero:
//x es Integer
x=1
… y ya, y de paso podríamos poner alguna otra información.
En definitiva no creo que el tipado dinámico implique lenguaje de juguete o lenguaje de protipado, pues como dije más arriba smalltalk lo tiene, y no creo que nadie se atreva a decir que es un lenguaje de juguete, solo un desafortunado, otro que usa el tipado dinámico es Haskell, aunque no es lo mismo, pues haskell es programación funcional, pero en definitiva la mayoría de los lenguajes modernos buscan precisamente acercarse a la programación funcional.
Por otra parte esto es algo que no se puede hacer con tipado estático, aunque quizás se pueda simular :
funcion decir(a){
print a
}funcion hacer(b,c){
b(c)
}hacer(a,”hola”)
Obviamente es un caso bastante inútil, pero estoy seguro que se capta la idea, en definitiva la funcion decir(a) puede ser cualquier cosa que acepte un argumento, sí, se pueden pasar funciones como argumentos, pues la mayoria de estos lenguajes, todo es un objeto, incluso las funciones, y fue esta características(y haber estudiado un poco de haskell) lo que me convenció de que los nuevos que llegan(o que llegaron ya) no son unos juguetes, sino que traen nuevas características que los viejos no tenía, ni podrán tener, no es casual que groovy se haya hecho el segundo lenguaje oficial de la plataforma java.
javi escribió
El tipado dinámico está muy bien y demás, pero a la larga termina por ser una desventaja más que una ventaja. Estoy harto de ver ClassCastException en ejecución cuando bien se podría haber evitado ese problema en compilación. Soy partidario de que todos los errores que te puedas quitar en compilación quitatelos.
caente escribió
Es cierto que el no poder detectar errores en tiempo de compilación es la gran deficiencia de los lenguajes dinámicos, de hecho jamás he usado ninguno para un gran proyecto, solo java y C++; pero ahora pienso darle una seria oportunidad a groovy, pues en el peor de los casos puedo usar clases de groovy para procesamientos que con java son muy incómodos, generalmente colecciones y cadenas, y usar java para lo demás, o quizás no, y use groovy absolutamente, simplemente debo evaluarlo.
De todas formas eso que dices puede ser solucionado con una buena batería de pruebas.
Sobrecarga de operadores « Programación, literatura y otras artes menores escribió
[...] Tipado dinámico [...]
Leonardo Micheloni escribió
Estoy de acuerdo contigo, ahora los que despotricaban contra VB6 por el famoso Variant que se laven la boca
. Anders Hejlsberg entiedió esto y se agregaron los tipos dinámicos en C# 3.0, pero con la comprobación de tipos en tiempo de compilación una mezcla de las dos cosas, en realidad un hace
var talCosa = from p in Coleccion where Criterio(p)==true;
y el compilador resuelve los tipos, los crea por nosotros y también lo hace dinámicamente, lo que permite que no hagamos
var entero = 1;
entero = “hola”;
porque da error de compilación.
¿Qué pensaís de los tipos anónimos de C# 3.0?
caente escribió
wow, no he usado nunca C# a nivel de producción, y no sabía eso de los tipos anónimos, si groovy tuviera esa comprobación en tiempo de compilación sería un batazo, como decimos en Cuba, y no veo por qué no lo hacen, en definitiva el código de groovy se compila a bytecode antes de ser ejecutado.