Cargando



Tipos, valores y expresiones en Lua

En este tutorial veremos los tipos y valores dentro de Lua, así como las expresiones que podemos usar para trabajar con los mismos, extendiendo así los conocimientos que tenemos de este simple pero potente lenguaje.


may 19 2015 05:14
Profesional
may 19 2015 09:14
Lua es un lenguaje dinámico en lo que respecta a los tipos de datos y sus valores, es decir, no existen definiciones de ningún tipo al momento de crear una variable y especificar que es un string, un número o incluso un booleano.

Las expresiones van de la mano con los valores, estos nos permiten realizar operaciones con los mismos, que pueden ir desde operaciones aritméticas, relacionales e incluso condicionales para darle dinamismo a nuestros programas, pero antes de pasar con las expresiones veamos los tipos de valores que poseemos en Lua y de que forman funcionan dentro del lenguaje.

Tipos y valores


En Lua cada valor carga su propio tipo, en el cual podemos encontrar ocho tipos diferentes de estos: nil, booleano, número, string, userdata, funcion, hilo y tabla, donde con la función type() podemos saber el nombre del tipo del valor dado. Veamos un ejemplo sencillo de como Lua interpreta esto de acuerdo a type():


tipos-valores-expre-lua.jpg


Como vemos el tipo viene dado por el valor que carga y la función designada nos ayuda a saber cual es, podemos ver que incluso en el último caso de la variable H el resultado es string y esto es porque la función type() siempre es string. Ya que vimos como Lua interpreta los tipos de datos veamos a detalle cada uno de estos:

Nil
Este es un tipo de valor cuya propiedad principal es ser diferente a otros valores. Como vimos en el tutorial pasado, una variable global posee por defecto el valor nil y si deseamos eliminar la misma realizamos la asignación de este valor, incluso podemos usar el mismo para representar la ausencia de un valor útil.

Booleano
Los valores booleanos como en el resto de los lenguajes de programación poseen dos valores, verdadero y falso pero a diferencia de otros lenguajes, este tipo de dato no posee un dominio total sobre condiciones ya que cualquier puede representar una condición.

Número
Este tipo de datos representa tanto números enteros y decimales. Lua no posee un tipo de valor entero y no lo necesita, ya que Lua puede representar cualquier entero de 32 bits sin problemas de redondeo, pero lo más interesante del lenguaje es que podemos compilarlo para que utilice otro tipo, como enteros largos o floats, lo cual es bastante útil para casos donde el hardware no tiene soporte para decimales.

String
Los string en Lua son una secuencia de caracteres, son valores que son inmutables, es decir, que no podemos cambiar un caracter dentro de la cadena. Los mismos son manejados por la memoria automática del lenguaje al igual que el resto de objetos y la asignación de la cadena puede ser con comillas dobles o simples.

Tabla
El tipo de dato tabla implementa un array asociativo, el cual es un array que puede ser indexado no solo con números sino con strings o cualquier otro valor del lenguaje, excepto nil. Las tablas no tienen un tamaño fijo por lo que podemos incluir tantos elementos como deseemos y con ellos podemos representar módulos, paquetes y objetos por igual. Por último para su creación es tan sencillo como utilizar los corchetes {} en la inicialización de la tabla.

Funciones
Las funciones en Lua tienen un comportamiento bastante peculiar, a las mismas podemos guardarlas en variables, pasarlas como argumentos a otras funciones y retornarlas incluso como resultados, donde Lua puede llamar a estas funciones escritas tanto en el propio lenguaje así como en C.

Userdata
El tipo de dato userdata permite almacenar en variables de Lua información arbitraria de C. No tiene operaciones predefinidas en Lua, a excepción de la asignación y pruebas de igualdad, donde la función principal de este tipo es de representar nuevos tipos como tal creados por una aplicación o una librería escrita en C.


Como vemos los tipos no discrepan mucho de lo que podemos encontrar en los lenguajes actuales, pero lo que si es seguro es que la simplicidad que tenemos para representar los mismos es mucho mayor, veamos entonces el papel de las expresiones y como podemos utilizarlas con nuestros valores.

Operaciones aritméticas


Las operaciones aritméticas son sumamente importantes para cualquier programa y es importante conocer como manejar las mismas y que restricciones pueden existir en el lenguaje que estamos utilizando. Lua soporta los operadores convencionales a los cuales estamos acostumbrados: La adición, sustracción, multiplicación , división, exponencial, porcentaje y la negación.

Veamos entonces un código sencillo donde demostramos el uso de algunos operadores de Lua:
x = 8 + 5
y = 9 - 2
print(x * y%0.01)
Utilizamos la suma, la resta, y la división entre 2 sobre el resultado de una operación de multiplicación, veamos como la respuesta del interprete cuando ejecutamos nuestro código por consola:


Como vemos Lua no difiere mucho del resto de los lenguajes para las operaciones aritméticas, pero su simplicidad para escribir código lo hace bastante sencillo de manejar para el desarrollo de programas.

Operadores relacionales


Lua al igual que otros lenguajes nos brinda operadores relaciones como el mayor que >, menor que <, menor o igual <= o mayor o igual >=, el igual-igual == y la negación ~=. Vemos que el único que quizá difiere es la negación pero luego que nos acostumbremos no habrá problemas con su uso.

Todos estos operadores pueden retornar verdadero o falso, donde incluso podemos aplicar tanto el operador de igualdad como el de negación a dos valores. Estas comparaciones Lua las hace en función del tipo además de otros factores, veamos en el siguiente código donde la comparación se hace en función del mismo objeto:
a = {}; a.x = 1; a.y = 0
b = {}; b.x = 1; b.y = 0
c = a
Donde si comparamos los mismos el resultado de la operación nos da que a es igual a c pero que a es diferente a b, esto por un tema de que son el mismo objeto. Adicionalmente, debemos tener sumo cuidado al comparar diferentes tipos, ya que por ejemplo 6 es diferente a “6” y si hacemos algo como “3” < “8” Lua dará un error ya que estamos mezclando los strings.

Operadores lógicos


Los operadores lógicos en Lua son el and, or y not. Cuando se realiza una comparación utilizando estos operadores, se retornará el primer argumento en el caso que sea falso, en el caso contrario retornará el segundo, veamos una serie de ejemplos en la consola interactiva para demostrar lo anterior mencionado.


Concatenación


Para realizar la concatenación en Lua es mediante los dos puntos, cambia un poco la sintaxis con respecto a otros lenguajes pero de igual forma es bastante simple, pero Lua siempre va un poco más allá y si se encuentra con algún número y existe una operación de concatenación el mismo lo convierte a un string, veamos dos ejemplos sencillos de esta operación:


Como vemos para el primer caso se realiza la operación sin ningún problema, y para el segundo caso que tenemos números, Lua los convierte automáticamente en string. Es importante recordar que los strings son inmutables por lo que esta operación siempre crea un nuevo string sin realizar ninguna modificación a su operando.

Constructores


Por último, tenemos los constructores, los cuales son expresiones que nos permiten crear e inicializar tablas, esta característica es única de Lua y es una de sus más mecanismos más versátiles y poderosos. Podemos utilizar un constructor vacío sin ningún problema con solo los corchetes {} el cual creará una tabla vacía como tal. Estos también pueden inicializar arreglos o listas, veamos un ejemplo:
dias = {"Domingo", "Lunes", "Martes", "Miercoles",
"Jueves", "Viernes", "Sabado"}
Aquí creamos una lista con los días de la semana y si deseamos acceder a sus elementos con especificar el índice del mismo tenemos, por ejemplo para obtener el jueves sería el índice número 5 o el domingo sería el número 1, ya que Lua no inicializa en cero como el resto de los lenguajes, veamos como luce cuando lo ejecutamos en nuestra consola:

tipos-valores-expre-lua-5.jpg


También podemos crear nuestro propios arrays asociativos del tipo llave valor:

arreglo = {x=26, y=67}

Pero es importante que para poder acceder a sus valores hagamos la referencia al índice con comillas dobles de resto obtendremos el valor nil, veamos nuestra operación en la consola interactiva:

tipos-valores-expre-lua-6.jpg


Con esto damos por finalizado el tutorial, donde pudimos ver que Lua extiende su simplicidad a todas las aristas que lo componen, desde los tipos dinámicos que maneja, la forma sencilla de realizar asignaciones, el manejo de operadores relacionales y lógicos, además de brindarnos herramientas sumamente útiles como concatenaciones y los constructores para hacer de nuestra experiencia con el lenguaje lo más amena y agradable posible.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X