Volver a la página principal
miércoles 11 septiembre 2024
20

Cómo usar tipos en Lua

En Lua, los tipos de datos son dinámicos, lo que significa que las variables no necesitan una declaración de tipo explícita; su tipo es determinado en tiempo de ejecución según el valor que almacenan. Lua tiene un conjunto reducido de tipos de datos básicos, pero su flexibilidad proviene principalmente del tipo tabla.

Tipos de datos en Lua

Lua soporta los siguientes tipos de datos básicos:

  • nil: Representa la ausencia de un valor.
  • boolean: Valores lógicos, pueden ser true o false.
  • number: Números (pueden ser enteros o flotantes).
  • string: Cadenas de texto.
  • table: Estructura de datos general, utilizada para arrays, listas y mapas.
  • function: Representa una función, ya sea nativa o definida por el usuario.
  • userdata: Representa datos almacenados en C.
  • thread: Representa un hilo de ejecución independiente (coroutines).

Declaración de variables en Lua

No es necesario especificar el tipo al declarar una variable, ya que Lua determina el tipo en función del valor asignado.

local numero = 42          -- number
local texto = "Hola Lua"    -- string
local verdadero = true      -- boolean
local nada = nil            -- nil

Uso de diferentes tipos de datos

Tipo nil

El tipo nil indica la ausencia de valor. Por defecto, las variables no inicializadas en Lua tienen el valor nil.

local variable
print(variable)  -- nil

Además, puedes asignar explícitamente nil para eliminar el valor de una variable.

variable = 42
variable = nil  -- Se elimina el valor

Tipo boolean

Lua utiliza el tipo boolean para representar valores lógicos, que pueden ser true o false.

local esVerdadero = true
local esFalso = false

En Lua, cualquier valor es considerado verdadero excepto false y nil.

if 0 then
    print("Cualquier valor es verdadero, excepto false y nil")
end

Tipo number

El tipo number en Lua puede representar tanto enteros como números de punto flotante.

local entero = 10
local flotante = 3.14

Lua utiliza de manera predeterminada números de doble precisión (flotantes) para representar todos los números, lo que permite manejar tanto enteros como decimales sin distinción.

Tipo string

Las cadenas de texto en Lua se representan con el tipo string. Se pueden definir usando comillas simples o dobles.

local saludo = "Hola, Mundo"
local despedida = 'Adiós, Mundo'

Lua también permite concatenar cadenas utilizando el operador ...

local completo = saludo .. " " .. despedida
print(completo)  -- Hola, Mundo Adiós, Mundo

Tipo table

El tipo table es uno de los más poderosos en Lua, ya que es una estructura de datos general que puede funcionar como array, diccionario, lista, conjunto, etc.

Ejemplo de tabla como array:

local frutas = {"manzana", "banana", "cereza"}
print(frutas[1])  -- manzana

Ejemplo de tabla como diccionario:

local persona = {
    nombre = "Juan",
    edad = 30
}
print(persona["nombre"])  -- Juan

Las tablas en Lua son dinámicas y pueden crecer o cambiar en tiempo de ejecución.

Tipo function

En Lua, las funciones son de primera clase, lo que significa que pueden almacenarse en variables, pasarse como argumentos y retornarse desde otras funciones.

local function saludar()
    print("Hola")
end

saludar()  -- Ejecuta la función

También puedes asignar funciones a variables o tablas.

local sumar = function(a, b)
    return a + b
end
print(sumar(5, 3))  -- 8

Determinar el tipo de una variable

Para verificar el tipo de una variable en Lua, se usa la función type().

local numero = 42
print(type(numero))  -- number

Ejemplo de varios tipos:

local variables = {42, "Texto", true, nil, {1, 2, 3}, function() return "función" end}

for i, v in ipairs(variables) do
    print(type(v))
end

Salida:

number
string
boolean
nil
table
function

Tipos personalizados con metatables

Aunque Lua tiene un conjunto básico de tipos, puedes crear tipos personalizados utilizando metatables. Esto te permite agregar comportamientos especiales a las tablas, como sobrecargar operadores o definir comportamiento específico para ciertas operaciones.

Ejemplo de metatables:

local miTabla = {}
local mt = {
    __index = function(t, k)
        return "No existe el campo " .. k
    end
}
setmetatable(miTabla, mt)

print(miTabla.campoInexistente)  -- No existe el campo campoInexistente

Conclusión

En Lua, los tipos de datos son flexibles y se manejan dinámicamente. Desde los básicos como number, string, y boolean, hasta las poderosas tablas, que permiten crear estructuras complejas. Además, puedes determinar el tipo de una variable en cualquier momento utilizando la función type(), y si es necesario, extender la funcionalidad de los tipos nativos usando metatables.

Para más información, consulta la documentación oficial de Lua.

Etiquetas:
lua
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer