Anda di halaman 1dari 4

Lenguajes fuertemente, dbilmente, estticamente y dinmicamente tipados Uno de los aspectos ms importantes de cualquier programa es, sin duda,

el tema de los datos. Los datos son el soporte de la informacin, y la informacin es el corazn de cualquier programa. Los lenguajes de programacin utilizan las variables como contenedores de datos, para manipularlos y almacenarlos en una amplia variedad de maneras. Est claro que los datos tienen distintos tipos. A nadie se le escapa que no es lo mismo un nombre de persona que su edad, el primero es un texto y el segundo es un nmero. Los distintos lenguajes de programacin tienen en cuenta esta particularidad de los datos, y por lo tanto, todos tienen alguna forma de distincin entre los tipos de datos. No obstante, cada uno tiene una forma de afrontar esta particularidad. Ello ha llevado a podamos en cierto modo "clasificar" los lenguajes de programacin por la forma en la que tratan con el problema de los tipos de datosl. Dinmica y estticamente tipados Fuerte y dbilmente tipados

El tema es, sin duda, controvertido. Cada sesudo investigador o aficionado al tema podr darle mil definiciones y argumentos acerca de lo que significa cada uno de esos trminos, pero en nuestra humilde opinin, no conviene obsesionarse ni llevar el tema al extremo. Tener una ligera idea para entender que existen varias formas de afrontar el problema de los tipos es una cosa, y emprender una cruzada para defender no-s-qu-cosa de un lenguaje u otro, o tratar de ponerle puertas al campo, es otra. En este artculo, matizaremos los aspectos ms importantes que nos permiten distinguir la forma en que un lenguaje aborda el tema de los tipos de los datos, sin nimo de controversia ni de sentar ctedra... y por supuesto... influenciados por nuestra propia opinin de aficionados ;-) Lo mejor que puedes hacer con un artculo como ste es leerlo, no crertelo del todo, contrastarlo con otras fuentes y formarte tu propia opinin. La controversia entre stos tipados tiene fuertes races en el hecho de que cuando se disea un lenguaje, se tiene en mente si va a ser compilado o interpretado. Las diferencias en el diseo de un compilador o de un intrprete son radicales. Adems, debemos fijarnos en el hecho de que un mismo lenguaje, generalmente se compila o generalmente se interpreta. Por ejemplo, el lenguaje C, o C++ o C#, o Java generalmente es compilado. El lenguaje JavaScript, o PHP o Python, generalmente se interpretan. El tratamiento de tipos en un intrprete puede, en general, disfrutar de una riqueza mucho mayor en las estructuras que internamente se utilizan para representar a las variables. El compilador, por su parte, depende de una traduccin a cdigo mquina (puede ser de una

mquina real o una mquina virtual, como en el caso de .net o de Java). Eso hace que las estructuras para representar variables tengan una flexibilidad algo menor, y, si se quiere dotar de mecanismos ms flexibles o ms potentes a un compilador, generalmente redunde en un mayor consumo de tiempo y de memoria y tambin generalmente, a los compiladores se les suele exigir rapidez en el cdigo que generan y consumo de recursos reducido. Estos factores, en cierto modo, condicionan cmo los lenguajes tratan los tipos. Tipos estticos, tipos dinmicos. (static typing, dinamic typing) En un lenguaje estticamente tipado, cada variable debe ser declarada con un tipo. Eso ocurre por ejemplo en C# o Java. Para utilizar una variable de tipo entero, es necesario indicar que en efecto, es de ese tipo. El tipado esttico es tpico de los lenguajes compilados.El tipo no se altera hasta que la variable se sale de mbito y se extingue. ste comportamiento se aplica tanto a variables locales (a un mtodo o funcin), a parmetros (de un mtodo o funcin), a varibles de instancia (de un objeto), a variables de clase ("static"), o a variables globales (en lenguajes no orientados a objetos). Por ejemplo, en C# o java, para utilizar una variable de nombre "i" que contenga un entero int i; //Primero se declara i=3; //y luego se utiliza No es posible asignar un valor de otro tipo a una variable de un tipo concreto: i="hola"; //incorrecto En un lenguaje dinmicamente tipado, no suele ser necesario declarar el tipo de las variables. Es tpico de los intrpretes. Ocurre en lenguajes como PHP o Python. Las variables empiezan a existir cuando se les da valor. Los lenguajes dinmicamente tipados tienen en cuenta los tipos, desde luego, pero no en las variables, sino en su contenido. Una misma variable puede contener en un instante dado un dato de un determinado tipo, y en otro instante, puede contener otro dato de otro tipo. Por ejemplo, en Python, podemos utilizar una variable "i" para contener un entero, sin necesidad de indicar que va a contener un entero. (La almohadilla # (o gato) indica un comentario) i=3 #la variable comienza a existir al darle valor i="hola" #luego, puede contener un valor de otro tipo Vamos a contarlo de otro modo. Imagina que las variables fueran cajas de cartn (bueno, al fin y al cabo, una caja de cartn sirve para contener cosas): En los lenguajes estticamente tipados se le asigna el tipo a la caja. Es como si en la caja, pusieramos una etiqueta: "esta caja slo puede contener zapatos". A partir de ese momento, en esa caja slo se pueden meter zapatos, hasta que la caja sea destruida. En los lenguajes dinmicamente tipados, es el contenido el que tiene el tipo. En la caja no

colocamos ninguna indicacin acerca del contenido. Si metemos un par de zapatos ser una caja de zapatos, y si metemos un juguete ser una caja de juguetes. Nadie impide que metamos cualquier cosa. Bueno la segunda opcin parece, al menos intuitivamente, ms sencilla ms flexible Por qu no se utiliza siempre? Ah... amigo muy sencillo: en la segunda opcin, hay que abrir las cajas para saber lo que contienen. Con el tipado esttico, dadas dos variables enteras, si despus queremos hacer una suma, seguro que se puede hacer sin mirar, dado que el compilador sabe que seguro que contienen un entero, por lo tanto, la suma se puede hacer sin comprobaciones previas. int i1=3; int i2=5; int i3=i1+i2; //No se hacen comprobaciones en la suma: seguro que i1 e i2 contienen un entero. Con el tipado dinmico, las operaciones son algo ms costosas el intrprete deber obtener el contenido de las variables ("abrir las cajas") y decidir qu operacin hacer y cmo, suponiendo que sta sea posible. En Python, la tercera lnea necesita comprobaciones adicionales a nivel interno, con respecto al tipado esttico. i1=3 i2=5 i3=i1+i2 Fuertemente tipados, dbilmente tipados(strong typing, weak typing) En este punto, la controversia es algo mayor. No hay un criterio unnime acerca del grado de fortaleza o debilidad en los tipos. Comunmente, se entiende que un lenguaje tiene un sistema de tipos ms fuerte si para una determinada operacin, que requiera un determinado tipo de datos, el lenguaje no acepta tipos que pudieran ser "compatibles". Por ejemplo, si un lenguaje nos permite declarar un mtodo o funcin que acepte como parmetro un nmero real de doble precisin (es decir, un double), consideraramos que el lenguaje est muy fuertemente tipado si slo permitiese llamadas o invocaciones a esa funcin o mtodo pasndole como parmetro un dato con un tipo double. A partir de ah, podramor ir rebajando el listn. Por ejemplo, en la situacin descrita, casi todos los lenguajes permiten una serie de conversiones implcitas. Es decir, muchos lenguajes (como C# o Java, que son estticamente tipados) permitiran invocar un mtodo que aceptase un double como parmetro pasndole un float (un nmero con decimales de simple precisin), o incluso un entero. Es decir, en ese sentido, C# o Java estn fuertemente tipados, pero no todo lo fuertemente tipado que se puede estar. Todava se podra rebajar ms el listn: si en el mismo caso, el mtodo que acepta un

double, intentsemos una llamada pasndole una cadena (que podra contener en sus carcteres la representacin de un double, y por lo tanto, la operacin podra tener cierto sentido, ej: "3.1416"), un lenguaje dbilmente tipado permitira la llamada, e intentara, en el interior del mtodo o funcin, interpretar la cadena como un double. Prcticamente todos los lenguajes permiten una cierta conversin implcita de tipos, especialmente si se pueden considerar seguras. Por ejemplo, convertir un entero a un double suele ser una operacin segura, dado que un entero no tiene decimales, y un double s... es decir, es un tipo ms amplio. Una conversin de ste tipo puede ser implcita con un alto grado de seguridad. Al reves no es as. Si yo tengo un double (Ej: 2.68) y lo utilizo en un contexto en el que se requiere un entero, qu debera hacer el lenguaje con los decimales? Los quita? Los redondea? Un lenguaje dbilmente tipado, en general, permite ste tipo de conversiones implcitas inseguras. Es su filosofa que el programador se encargue de programar, y el lenguaje se encargar de hacer todo lo posible para que el programa ejecute, liberando al programador de llevar tambin la cuenta de posibles conversiones de tipos. Esta ltima forma de actuar proporciona, sin duda, una manera ms sencilla de programar. Es decir, en un lenguaje dbilmente tipado, el lenguaje prestar poca atencin a una definicin estricta de los tipos. Eso hace que el programador pueda centrarse en el objetivo del problema que resuelve, que el lenguaje intentar encargarse de todo lo referido a los tipos, sin embargo, la consecuencia lgica es que los posibles errores se detectarn ms tarde, en tiempo de ejecucin. ste hecho de permitir una mayor o menor relajacin en el uso de los tipos no est tan ntimamente relacionado con la compilacin o la interpretacin. Ni siquiera tiene una relacin evidente con el tipado esttico o dinmico. Sin embargo, s puede verse una cierta tendencia a que los lenguajes estticamente tipados (como C# o Java) tambin tengan una cierta fortaleza en el tratamiento de los tipos. Conclusin Sacar conclusiones es complicado. Valorar si es mejor tal o cual cosa es esfuerzo perdido... para segn que aplicaciones puede venir mejor una y para otras no.Valralo t mism@ y saca tus propias conclusione: ser el mejor criterio que puedas tener ;-) ver: 1 Pseint es dinamicamente tipado.psc Fuente:
http://latecladeescape.com/articulos/1520-lenguajes-fuertemente-debilmente-estaticamente-y-dinamicamentetipados

Anda mungkin juga menyukai