Para cualquier persona que haya estado programando durante un tiempo prolongado, es más que probable que haya usado varios lenguajes de programación diferentes. Dado el panorama actual del software, también es probable que haya trabajado tanto con idiomas fuertemente tipados como con lenguajes débiles..
Es decir, ha trabajado en lenguajes de programación que requieren que especifique el tipo de datos de sus variables, cuáles serán sus funciones, etc., y ha trabajado en lenguajes de programación que No es necesario que establezca explícitamente esa información.
Si sabes exactamente de lo que estoy hablando, entonces los artículos de esta serie probablemente no sean para ti; Sin embargo, si recién está empezando a programar o está empezando a usar un nuevo lenguaje que se escribe de forma dinámica (o se escribe de manera débil), hay una serie de cosas que vale la pena mencionar en relación con el trabajo con tipos de datos..
En esta serie, analizaremos los lenguajes dinámicos, cómo se definen las variables, cómo se deducen sus tipos de datos y son diferentes de sus contrapartes estáticas, y cómo evitar algunos de los principales escollos que surgen al trabajar con ellos. estos idiomas.
Antes de que veamos las dificultades de la coacción de tipo y tengamos más probabilidades de experimentar sus dificultades, es importante comprender qué son los tipos de datos y cómo varían de los idiomas tipográficos y de los tipos dinámicos.
En general, es más probable que encuentre lenguajes fuertemente tipados en la familia de lenguajes de programación que se compilan. Eso incluye lenguajes como C y C++.
Sin embargo, hay son excepciones.
Hay algunos lenguajes que se compilan a alguna forma de código de bytes o algún tipo de lenguaje intermedio y luego son procesados por un intérprete. Java es uno de esos lenguajes. Estos idiomas están fuertemente tipados. También se compilan. Pero no se compilan necesariamente en ejecutables binarios, sino en un código de bytes que es interpretado por un software de terceros..
Sé que suena un poco confuso, así que quizás algún código ayude a aclarar esto. En los lenguajes más tipificados, siempre declara el tipo de datos que una variable representará.
Por ejemplo:
string example = "El zorro marrón rápido salta sobre el perro perezoso."; número int = 42; doble efectivo = 99.99; boolean existe = true;
Aunque el código debe ser lo suficientemente simple para que se explique por sí mismo, observe que muestra variables que contienen cadenas, tipos numéricos y valores booleanos..
En los idiomas fuertemente tipados, también debe indicar el tipo de información que devolverá una función. Tomemos los siguientes ejemplos:
cadena pública getGreeting () return "Hello world!"; public boolean isAlive () return true; public void doSomething () for (int i = 0; i < 10; i++ ) // Perform something
Tenga en cuenta que en el ejemplo anterior, la función final tiene un tipo de retorno de vacío
. Esto significa que la función no vuelve. cualquier cosa. Cuando comencemos a ver lenguajes dinámicos, veremos cómo difiere esto..
Obviamente, estos son extremadamente simples, pero está bien, ya que son para hacer un punto: los lenguajes fuertemente tipados tienen variables y funciones que tienen su tipo de datos establecido explícitamente.
Cuando se trata de idiomas tipificados dinámicamente, hay una serie de lujos que vienen con poder definir variables y crear funciones..
En los ejemplos anteriores, la variable ejemplo
solo puede sostener un cuerda
. Eso significa que no puede contener un número de punto flotante o un valor booleano. debe sostenga una cuerda En lenguajes dinámicamente escritos, ese no es el caso.
En cambio, las variables pueden referirse a una cadena en un punto durante el tiempo de vida del programa, un entero en otro punto y un valor booleano en otro punto. Por supuesto, esto puede resultar confuso si no se adoptan algunos tipos de estándares de codificación, pero eso está fuera del alcance de este punto..
El punto es que las variables definidas en idiomas tipificados dinámicamente pueden referirse a diferentes tipos de datos a través de la ejecución de un programa..
Por ejemplo:
ejemplo de var example = "El zorro marrón rápido salta sobre el perro perezoso."; ejemplo = 42; ejemplo = 99.99; ejemplo = verdadero;
Tenga en cuenta que estas variables no tienen un tipo de datos, simplemente se declaran como tipo var y luego se configuran según sea necesario. Algunos idiomas definen las variables de manera diferente a lo que ves arriba, pero el punto no es mostrar cómo un idioma lo hace sobre el otro. Es para mostrar cómo las variables simplemente no se refieren a un tipo específico de datos.
Las funciones funcionan de manera similar. Es decir, en lugar de definir el tipo de retorno de los datos, simplemente defina la función y haga que devuelva un valor.
función getGreeting () return "Hello world!"; function isAlive () return true; función doSomething () for (var i = 0; i < 10; i++ ) // Perform something
De nuevo, los diferentes idiomas requerirán que las funciones se definan de diferentes maneras (por ejemplo, algunos idiomas no usan el función
palabra clave, pero en lugar de usar el def
palabra clave), pero lo esencial es que no tiene que indicar explícitamente el tipo de datos que se devolverán desde la función.
Esta puede ser una herramienta realmente poderosa; sin embargo, también puede dificultar la lectura del código, entender qué devolverá la función y / o saber cómo configurar un código externo para llamar a las funciones (como en el caso de comparaciones, condicionales, etc.). en).
Esta es la razón por la cual los estándares de codificación y las convenciones de nombres claras son importantes. Una vez más, sin embargo, ese es un tema que está fuera del alcance de esta serie..
Ahora que hemos echado un vistazo a cómo los idiomas tipificados y los tipos dinámicamente manejan variables, funciones y tipos de datos en general, podemos centrar nuestra atención en cómo funciona la coacción de tipos dentro del contexto más amplio de aplicaciones escritas dinámicamente idiomas mecanografiados.
Específicamente, observamos cómo podemos usar el rendimiento para nuestra ventaja, y podemos ver cómo podemos terminar introduciendo errores al no ser explícitamente claros en nuestro código. Así que a partir del siguiente artículo, vamos a hacer exactamente eso..
Mientras tanto, agregue todos los comentarios, preguntas y comentarios generales al feed a continuación.!