0Pricing
Lua Academy · Lección

Definición y llamada de funciones

Aprenda la sintaxis para declarar funciones, las convenciones de llamada y la diferencia entre funciones locales y globales.

Definición y llamada de funciones es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.

Sintaxis de las funciones

Las funciones en Lua se definen con la palabra clave function. El cuerpo es un bloque terminado por end. Las funciones pueden ser globales o locales. Para llamar a una función, añada paréntesis con los argumentos. Si omite argumentos, los parámetros que falten reciben nil.

function sayHello(name)
  print("Hello, " .. (name or "World") .. "!")
end

sayHello("Lua")   -- Hello, Lua!
sayHello()        -- Hello, World!

local function add(a, b)
  return a + b
end
print(add(3, 4))  -- 7

Valores devueltos

Las funciones devuelven valores mediante return. A diferencia de la mayoría de los lenguajes, las funciones de Lua pueden devolver varios valores. Si no utiliza return explícitamente, la función no devuelve nada (cero valores). Los valores devueltos sobrantes se descartan cuando la llamada no es la última expresión de una lista.

local function minMax(t)
  local lo, hi = t[1], t[1]
  for i = 2, #t do
    if t[i] < lo then lo = t[i] end
    if t[i] > hi then hi = t[i] end
  end
  return lo, hi
end

local lo, hi = minMax({5,2,8,1,9})
print(lo, hi)  -- 1  9

La función como valor

En Lua, las funciones son valores de primera clase. Puede almacenarlas en variables, pasarlas como argumentos a otras funciones y devolverlas. Esto permite implementar callbacks, funciones de orden superior y patrones de programación funcional.

local ops = {
  add = function(a, b) return a + b end,
  sub = function(a, b) return a - b end,
  mul = function(a, b) return a * b end,
}

local function apply(op, a, b)
  return op(a, b)
end

print(apply(ops.add, 10, 3))  -- 13
print(apply(ops.mul, 4, 5))   -- 20

Funciones locales frente a globales

Utilice local function para las funciones auxiliares privadas de un módulo. Las funciones globales contaminan el espacio de nombres global y son accesibles desde cualquier lugar, lo que puede provocar conflictos de nombres. En la mayoría de los casos, prefiera funciones locales y exponga únicamente lo necesario mediante una tabla de módulo.

-- Bad: pollutes global namespace
function helper() end

-- Good: module-local
local function helper()
  return "I am local"
end

-- Module export pattern
local M = {}
function M.publicFunc()
  return helper()  -- can call local
end
return M

Métodos con sintaxis de dos puntos

Lua proporciona azúcar sintáctico para definir y llamar métodos en tablas. obj:method(arg) equivale a obj.method(obj, arg). La forma con dos puntos pasa implícitamente la tabla como primer argumento, que por convención se denomina self.

local Dog = {}
Dog.__index = Dog

function Dog.new(name)
  return setmetatable({name=name}, Dog)
end

function Dog:speak()
  print(self.name .. " says: Woof!")
end

local d = Dog.new("Rex")
d:speak()   -- Rex says: Woof!

Patrón de parámetros opcionales

Lua no tiene parámetros opcionales integrados, pero puede simularlos comprobando nil. Pase una única tabla de opciones a las funciones con muchos parámetros opcionales; es más claro que utilizar una lista larga de argumentos.

local function createUser(name, opts)
  opts = opts or {}
  return {
    name = name,
    role = opts.role or "user",
    active = opts.active ~= false,
    score = opts.score or 0,
  }
end

local u = createUser("Alice", {role="admin", score=100})
print(u.name, u.role, u.score)

Llamadas en cola

Una llamada en cola es una llamada a función que se encuentra en la posición final (la última acción antes de devolver el resultado). Lua realiza optimización de llamadas en cola: una llamada en cola correcta no utiliza espacio adicional en la pila. Esto permite una recursión profunda sin desbordamiento de pila cuando la llamada recursiva está en la posición final.

local function factorial(n, acc)
  acc = acc or 1
  if n <= 1 then return acc end
  return factorial(n - 1, n * acc)  -- tail call!
end

print(factorial(10))  -- 3628800
-- Can handle very large n without stack overflow

Funciones invocadas inmediatamente

Puede definir y llamar una función inmediatamente: (function() ... end)(). Esto resulta útil para crear un ámbito local, ejecutar código de configuración exactamente una vez o evitar contaminar el ámbito externo con variables temporales.

local result = (function()
  local temp = 100
  local adjusted = temp * 1.5
  return math.floor(adjusted)
end)()

print(result)   -- 150
-- temp and adjusted not visible here

Almacenar funciones en tablas

Almacenar funciones en tablas es una forma idiomática de diseñar módulos de Lua. La tabla actúa como un espacio de nombres. Puede definir funciones asignándolas a campos de la tabla o utilizando la notación de punto o de dos puntos con el nombre de la tabla.

local math2 = {}

function math2.clamp(val, lo, hi)
  return math.max(lo, math.min(hi, val))
end

function math2.lerp(a, b, t)
  return a + (b - a) * t
end

print(math2.clamp(150, 0, 100))  -- 100
print(math2.lerp(0, 10, 0.5))   -- 5.0

Cierres como callbacks

Las funciones de orden superior aceptan callbacks. En Lua, los callbacks son simplemente valores de tipo función. Los cierres resultan especialmente útiles como callbacks porque capturan el contexto de la llamada sin necesidad de pasar argumentos adicionales a través de la función de orden superior.

local function forEach(t, fn)
  for i, v in ipairs(t) do
    fn(v, i)
  end
end

local sum = 0
forEach({10, 20, 30}, function(v)
  sum = sum + v
end)
print(sum)   -- 60

forEach({"a","b","c"}, function(v, i)
  print(i, v)
end)

Comprobación rápida

¿Cuál es la salida de: local function f() return 1, 2, 3 end; local a, b = f()?

Repaso: funciones

Puntos clave:

  • Use local function para evitar contaminar los globales
  • Las funciones son ciudadanos de primera clase: puede almacenarlas en variables y tablas, y pasarlas como argumentos
  • La sintaxis con dos puntos pasa self implícitamente
  • Simule parámetros opcionales con opts or {}
  • Las llamadas en cola evitan el desbordamiento de pila en recursiones profundas
  • Las funciones invocadas inmediatamente crean ámbitos aislados

Preguntas frecuentes

¿La lección «Definición y llamada de funciones» es gratis?

Sí — el texto completo de «Definición y llamada de funciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Definición y llamada de funciones»?

Aprenda la sintaxis para declarar funciones, las convenciones de llamada y la diferencia entre funciones locales y globales. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Lua Academy?

No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Definición y llamada de funciones»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Lua Academy?

Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Definición y llamada de funciones
  2. Múltiples valores de retorno
  3. Varargs y el operador ...
  4. Recursión en Lua
← Volver a Lua Academy