Funciones

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Las funciones son bloques de código que puedes ejecutar múltiples veces al comando. También puedes conectarlos a eventos o asignarlos como devoluciones.

Funciones básicas

Una definición de función incluye:

  • El alcance de la función (global o local ).
  • La function palabra clave.
  • El nombre de la función en camelCase .
  • Los parámetros de la función en paréntesis (() ).
  • El bloque de código, o "cuerpo," de la función.
  • La end palabra clave.

El cuerpo de la función se ejecuta cuando llamas a la función. Para llamar a una función, escribe su nombre seguido de paréntesis. Puede definir una variable para aceptar el valor de retorno o usar el valor de retorno en lugar de una variable.


-- Esta función no tiene parámetros y devuelve nulo
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- Llamando una función sin un devolver
addOneAndTwo() -- 3

Parámetros

Los parámetros son variables que pones a disposición de la función y solo se usan en el alcance de la función. Las funciones no tienen parámetros por defecto. Si llamas una función con más parámetros de los que espera, Luau ignora los parámetros adicionales. Si llamas una función con menos parámetros de los que espera, Luau pasa nil por todos los parámetros que faltan.


-- Esta función tiene dos parámetros: num1 y num2
local function addNumbers(num1, num2)
print(num1 + num2)
end
addNumbers(2, 3) -- 5 veces
addNumbers(5, 6, 7) -- 11 veces
addNumbers(9) -- attempt to perform arithmetic (add) on number and nil

Volver

En el cuerpo de la función, la palabra clave return devuelve un resultado de una computación. Puede devolver múltiples valores de una función. return termina la ejecución de la función, y Luau espera que la palabra clave end siga las declaraciones de return. Por lo tanto, escribir código entre el comando return y el comando end arroja un error.


-- Esta función devuelve un valor de retorno
local function addNumbers(num1, num2)
local result = num1 + num2
return result
end
print(addNumbers(1, 2)) -- 3 veces
local seven = addNumbers(3, 4)
print(seven) -- 7 veces
-- Esta función devuelve múltiples valores: suma y diferencia
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- Llamando una función y esperando múltiples valores de retorno
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5 veces
print(difference) -- -1

Métodos

Los métodos son funciones que son miembros de un objeto, como una clase o tabla . Esperan que el objeto en sí (self ) sea el primer argumento. Cuando llame a un método, use la notación de columnas (: ) en lugar de la notación de puntos (. ) para pasar self como el primer argumento automáticamente.

Todos los objetos de Roblox descienden de Instance y tienen métodos comúnmente usados, incluidos Instance:Destroy(), Instance:Clone() y Instance:FindFirstChild().


-- Destrucción de una parte con notación de punto (función)
local firstPart = Instance.new("Part")
firstPart.Parent = workspace
print(firstPart.Parent) -- Espacio de trabajo
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- cero
-- Destrucción de una parte con notación de columnas (método)
local secondPart = Instance.new("Part")
secondPart.Parent = workspace
print(secondPart.Parent) -- Espacio de trabajo
secondPart:Destroy()
print(secondPart.Parent) -- nil

Definición de métodos

Para crear un método en una tabla, use el nombre del método como la clave y la función del método como el valor. En la definición del método, el parámetro self se refiere a la tabla principal del método. Cuando llama un método usando notación de columnas, pasa la tabla misma como el primer argumento. Puede definir parámetros para un método, pero debe enumerarlos después del parámetro self.

En el siguiente ejemplo, la tabla testButton tiene un método como valor de la clavechangeEnabled. Puede verificar que self se refiera a la tabla principal del método imprimiendo el valor de self.enabled.


local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- verdad
-- Llamar al método
testButton:changeEnabled(false) -- false

Devoluciones de llamada

Las devoluciones de llamada son funciones que se ejecutan en respuesta a otra función o proceso. Algunas funciones Global.RobloxGlobals, como delay() y spawn(), toman devoluciones de llamada como parámetros. En la API de Roblox Studio, las devoluciones de llamada son miembros de solo escritura de algunas Clases. A diferencia de los manejadores de eventos , las devoluciones de llamada se producen hasta que devolver. Las devoluciones de llamada ampliamente utilizadas incluyen:

Configurando devoluciones de llamada

Para establecer una devolución de llamada, asigna una función a ella. Por ejemplo, BindableFunction.OnInvoke es una devolución de llamada de BindableFunction . Puede establecer una función anónima o a ella, y puede llamar ( invoca ) esa función llamando el método en la devolución de llamada. Los argumentos que pasa a hacia adelante a la devolución de llamada, y el valor de retorno de la función de devolución de llamada regresa al llamador de .


local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84

Técnicas de Función

Gestores de Eventos

Puedes asignar una función, conocida como handler de eventos , para ejecutarla cuando un evento se active. Por ejemplo, puedes crear una función llamada onPlayerAdded() al evento Players.PlayerAdded para imprimir el nombre de cualquier jugador que se una. Para más información, consulta Built-In Events.


local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)

Funciones Anónimas

Puede crear funciones sin nombres, conocidas como funciones anónimas , para usar como devoluciones de llamada y manejadores de eventos . Al igual que las funciones nombradas, las funciones anónimas deben comenzar y terminar con las palabras clave function y end, pero no necesita la palabra clave local para indicar el alcance local porque siempre tienen un alcance local.

En el siguiente ejemplo, la devolución de llamada para la función task.delay() y el manejador de eventos para el evento Players.PlayerAdded son funciones anónimas.


-- Función anónima en una llamada de vuelta a task.delay ()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- Función anónima en un manejador de eventos
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)

Funciones en ModuleScripts

Puede reutilizar funciones en múltiples scripts almacenándolas en ModuleScripts . Las funciones son un introducirde datos Luau, por lo que puede almacenarlas en tablas con otros datos.

Funciones variádicas

Una función variadic acepta cualquier número de argumentos. Por ejemplo, print() es una función variadic.


print(2, "+", 2, "=", 2+2) --2 + 2 = 4
print( string.format("The %s is a %s!", "cake", "lie") ) -- ¡El pastel es una mentira!
print( string.char(115, 101, 99, 114, 101, 116) ) -- secret

Definición de funciones variádicas

Para definir una función variádica, usa el token ... como el último o único parámetro (no debe confundirse con .. , el operador de concatenación ). Puede poner los valores ... en una tabla para facilitar su uso.


local function variadic(named, ...)
local arguments = {...} -- empaqueta los argumentos adicionales en una tabla
print("Named argument =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "Hi", 20, "Variadic Function")
--[[ Resultando Salida:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]

Reenvío de argumentos

Puede definir funciones variádicas como envolventes alrededor de otras funciones para paseo avanzar argumentos desde el envoltorio a las otras funciones.


local function printAround(functionToPrintAround, ...)
print("Before")
functionToPrintAround(...)
print("After")
end
local function addNumbers(x, y, z)
print("x =", x)
print("y + z =", y + z)
end
printAround(addNumbers, 1, 2, 3)
--[[ Resultando Salida:
Before
x = 1
y + z = 5
After
]]

Llamando una función variádica con matrices

Si desea pasar un conjunto de valores de la tabla a una función variádica global, como print() , puede usar la función global unpack() para pasar los valores de la tabla en lugar de la tabla misma.


local squares = {1, 4, 9, 16, 25}
print( "The first 5 square numbers are:", unpack(squares) )
-- The first 5 square numbers are 1 4 9 16 25