Funciones

Vamos a hablar sobre las funciones en Lua. Las funciones son bloques de código reutilizables que realizan una tarea específica. En Lua, las funciones son de primera clase, lo que significa que pueden ser asignadas a variables, pasadas como argumentos a otras funciones y devueltas como valores desde otras funciones.

Definición de Funciones

En Lua, puedes definir una función utilizando la palabra clave function, seguida del nombre de la función y una lista de parámetros entre paréntesis. El cuerpo de la función se escribe entre end. Por ejemplo:

function saludar(nombre)
    print("Hola, " .. nombre .. "!")
end
saludar("Lua") -- Imprime: Hola, Lua!

En este ejemplo, hemos definido una función llamada saludar que toma un parámetro nombre y imprime un saludo personalizado. Luego, llamamos a la función pasando el argumento "Lua", lo que resulta en la impresión del mensaje de saludo.

Funciones Anónimas

En Lua, también puedes definir funciones anónimas, que son funciones sin un nombre. Estas funciones se pueden asignar a variables o pasar como argumentos a otras funciones. Por ejemplo:

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

En este ejemplo, hemos definido una función anónima que suma dos números y la hemos asignado a la variable sumar. Luego, llamamos a la función pasando los argumentos 3 y 5, lo que resulta en la impresión del resultado de la suma.

Funciones con Retorno

Las funciones en Lua pueden devolver valores utilizando la palabra clave return. Puedes devolver cualquier tipo de dato, incluyendo múltiples valores. Por ejemplo:

function dividir(a, b)
    if b == 0 then
        return nil, "Error: División por cero"
    else
        return a / b
    end
end

local resultado, error = dividir(10, 2)

if error then
    print(error)
else
    print("Resultado: " .. resultado) -- Imprime: Resultado: 5
end

En este ejemplo, la función dividir devuelve el resultado de la división si el divisor no es cero, o devuelve nil y un mensaje de error si el divisor es cero. Luego, llamamos a la función y manejamos el resultado y el error de manera adecuada.

Múltiples valores de retorno

En Lua, una función puede devolver múltiples valores separados por comas. Por ejemplo:

function coordenadas()
    return 10, 20
end

local x, y = coordenadas()

print("Coordenadas: (" .. x .. ", " .. y .. ")") -- Imprime: Coordenadas: (10, 20)

Como vemos en este ejemplo, la función coordenadas devuelve dos valores, que luego se asignan a las variables x y y. Esto es útil para devolver múltiples resultados desde una función sin necesidad de usar tablas u otras estructuras de datos. Puedes observar el operador de concatenación (..) para construir la cadena de texto que muestra las coordenadas.

Funciones Recursivas

Las funciones en Lua también pueden ser recursivas, lo que significa que pueden llamarse a sí mismas para resolver un problema. Por ejemplo, aquí hay una función recursiva para calcular el factorial de un número:

function factorial(n)
    if n == 0 then
        return 1
    else
        return n * factorial(n - 1)
    end
end

print(factorial(5)) -- Imprime: 120

En este ejemplo, la función factorial se llama a sí misma con un valor decreciente de n hasta que llega a 0, momento en el cual devuelve 1. El resultado es el factorial de 5, que es 120.

Funciones en tablas

En Lua, las funciones también pueden ser almacenadas en tablas, lo que permite organizar el código de manera más estructurada. Por ejemplo:

local miTabla = {
    saludar = function(nombre)
        print("Hola, " .. nombre .. "!")
    end,
    sumar = function(a, b)
        return a + b
    end
}
miTabla.saludar("Lua") -- Imprime: Hola, Lua!
print(miTabla.sumar(3, 5)) -- Imprime: 8

En este ejemplo, hemos creado una tabla llamada miTabla que contiene dos funciones: saludar y sumar. Luego, llamamos a estas funciones utilizando la sintaxis de acceso a campos de la tabla.

Como hemos visto, las funciones en Lua son una parte fundamental del lenguaje y ofrecen una gran flexibilidad para organizar y reutilizar el código. Ya sea que estés definiendo funciones con nombre, funciones anónimas, funciones recursivas o funciones almacenadas en tablas, Lua te proporciona las herramientas necesarias para trabajar con funciones de manera efectiva.