Las funciones son uno de los conceptos más importantes en programación. Te permiten reutilizar código, organizar mejor tus scripts y crear sistemas complejos en tus juegos. En Lua, las funciones son "ciudadanos de primera clase", lo que significa que son muy flexibles.
La sintaxis básica de una función en Lua es:
function nombreDeLaFuncion()
print("¡Este código se puede reutilizar!")
end
-- Llamamos a la función
nombreDeLaFuncion()
¡Importante! En Lua siempre debes cerrar la función con end. No se usan llaves {}.
Los parámetros permiten que la función reciba información para trabajar.
function atacar(enemigo, daño)
print("El héroe ataca a " .. enemigo .. " por " .. daño .. " de daño!")
end
atacar("Goblin", 25)
atacar("Dragón", 45)
return)Una función puede devolver un resultado usando return.
function calcularDaño(base, multiplicador)
return base * multiplicador
end
local dañoFinal = calcularDaño(20, 1.5)
print("Daño infligido: " .. dañoFinal) -- 30
Múltiples retornos: Lua permite devolver varios valores al mismo tiempo.
function obtenerEstadisticas()
return 120, 80, 35 -- vida, mana, stamina
end
local vida, mana, stamina = obtenerEstadisticas()
print("Vida: " .. vida .. ", Mana: " .. mana)
Es muy recomendable usar local dentro de las funciones.
function subirNivel()
local experiencia = 250
local nivelActual = 8
local nuevoNivel = nivelActual + 1
print("¡Subiste al nivel " .. nuevoNivel .. "!")
return nuevoNivel
end
subirNivel()
Buena práctica: Siempre declara tus variables como local dentro de las funciones para evitar problemas de alcance global.
En Lua puedes guardar funciones dentro de variables o tablas.
local curar = function(cantidad)
print("El jugador se curó " .. cantidad .. " puntos de vida")
end
curar(50)
Ejemplo práctico en juegos:
local habilidades = {
atacar = function() print("¡Ataque básico!") end,
defender = function() print("¡Defensa activada!") end,
curar = function() print("¡Curación aplicada!") end
}
habilidades.atacar()
habilidades.curar()
Lua no tiene parámetros por defecto de forma nativa, pero se simulan fácilmente con or.
function lanzarHechizo(nombre, manaCoste)
manaCoste = manaCoste or 15 -- valor por defecto
print("Lanzaste " .. nombre .. " por un coste de " .. manaCoste .. " mana")
end
lanzarHechizo("Bola de Fuego") -- usa 15
lanzarHechizo("Rayo", 30) -- usa 30
Prueba esto en lua.org:
saludar que reciba un nombre y imprima “¡Bienvenido, [nombre]!”calcularDaño que reciba daño base y multiplicador, y devuelva el daño final.recibirDaño que reste daño a la vida actual y devuelva la vida restante.habilidades que contenga 3 funciones anónimas (atacar, defender y curar) y ejecútalas.