Tipado estático VS Tipado dinámico

Es un tema polémico, espero no herir la sensibilidad de nadie.

El tipado estático es mejor. Gracias.

Jajaja 😀 Ahora veamos por que pienso esto y bajo que circunstancias. Pero primero hay que definir que es tipadotyping, si ya lo sabes salta cuatro parrafos.

NOTA: No confundir fuertemente tipado con tipado estatico ni debilmente tipado con tipado dinamico ya que se tratan de otros concceptos.

Tipado. Es la definicion del tipo que tendra una variable dada, por ejemplo si en una variable queremos guardar numero enteros, lo mejor es tener una variable de tipo Int. Ya sea que la definamos nosotros (Tipado estatico) o bien sea definida al vuelo por mismo lenguaje (Tipado dinamico). Pero no solo eso, el dependiendo del tipado que escojamos ganaremos o perderemos algunas caracteristicas. Por ejemplo la forma en que interactuan las variables, la manera de debuguear, la detección de errores, el completado de código la velocidad de implementación y  la velocidad de ejecución, etc. Generalmente aunque no siempre, los lenguaje interpretados usan tipado dinamico, mientras los lenguajes compilados utilizan tipado estatico, esto no es una regla es solo una tendencia.

El tipado estático nos obliga a definir desde el principio el tipo de una variable, ejemplos de lenguajes con tipado estatico son C, C++, Pascal, Java, Objetive-C, C#, entre otros, pero estos son los utilizamos en Qbit. Notese que C# esta incluido aunque exista la palabra clave var, la cual nos permite ahorrarnos un poquito de código, pero una vez que el compilador define el tipo este ya no puede cambiarse.

El tipado dinamico nos da la facilidad de no definir los tipos al declarar una variable, algunos ejemplos son PHP, JavaScript, Grooby, Phyton, Perl, entre otros, estos son los que mas usamos aquí.

Ahora si veamos las diferencias.

  • Velocidad de ejecución. Cuando la velocidad es un factor importante, lo que nos interesa es que nuestro programa se ejecute rápidamente, sin dudarlo debes escoger un lenguaje tipado estaticamente. Porque la validación de tipos se hará solamente al compilarlo, en cambio los lenguajes tipados dinamicamente hacen la validación en tiempo de ejecución y esta validación es tardada, alentando la tu programa.
  • Errores de tipado. Un error de tipado se presenta por ejemplo cuando intentas igualar o comparar dos variables de tipos incompatibles. Cuando programas en un lenguaje con tipado estático, el programa no compilara a menos que los tipos estén correctos, por ejemplo no te permitira comparar un entero contra una cadena, esto te garantiza que cuando por fin corra tu programa, no tendrá problemas de tipado… tendrá otros, pero no de tipado :). En cambio en si el lenguaje tiene tipado dinámico lo terminaras antes, pero debes cuidar no revolver tipos y no te darás cuanta de estos errores hasta que ejecutes el programa y este falle. Es decir esta ventaja se convierte en desventaja si buscas implementar rápidamente. Aunque si tienes un buen IDE te mostrara los errores antes de compilar.
  • Conversión de tipos. En los lenguajes estáticos, muchas de las conversiones entre tipos tendrás que hacerlas a mano (cast) y las que no tengas que hacer, te arrojaran Warnings de perdida de datos, obligándote a también hacerlas a mano. Y entre mas fuetemente tipado seran mas y mas conversiones entre tipos deberás hacer. En cambio los lenguajes tipados dinamicamente intentan hacer las conversiones ellos mismo, ahorrándote mucho código.
  • Completado de código. Este es un punto que casi nadie toca y que no tiene importancia en proyectos pequeños pero si en los que tienen muchas clases que interactuan entre si. Los lenguajes fuertemente tipados permiten a los IDEs completar código mas ‘atinadamente‘ que los tipados dinamicamente. Por ejemplo si hemos creado una clase llamada Vertebrado, y creamos una variable de tipo Vertebrado e intentamos asignarle el valor de otra clase, el IDE que estamos usando solamente nos sugerirá otras variables que sean del tipo Vertebrado o hereden de este tipo o funciones que retorne un valor de este tipo o de sus herederos. En cambio si el lenguaje es de tipado dinamico, el IDE no puede determinar que variables o funciones son o retornan objetos de tipo Vertebrado y no puede sugerirnos un grupo pequeño de posibilidades. Si no usas un buen IDE y prefieres el bloc de notas o inclusive algún editor que solamente ponga colores al código entonces olvídate de esta ventaja.

Aun faltan otras diferencias a revisar y por supuesto las conclusiones, pero el post se esta alargando mucho.

Continuara…

 

 

 

 

 

Eric Ruiz Osornio (Zeru). Instituto Politécnico Nacional, México. Gamer de StarCraft2, coder y administrador de proyectos.

Facebook Twitter 

Compartir en...Tweet about this on TwitterPin on Pinterest0Share on LinkedIn0Share on Google+0Share on Facebook2