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 = workspaceprint(firstPart.Parent) -- Espacio de trabajofirstPart.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 = workspaceprint(secondPart.Parent) -- Espacio de trabajosecondPart: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:
- MarketplaceService.ProcessReceipt , que maneja las compras de productos de desarrolladores.
- BindableFunction.OnInvoke , que llama a la función cuando un script llama BindableFunction:Invoke(...) .
- RemoteFunction.OnClientInvoke, que llama a la función cuando el jugadorllama RemoteFunction:FireClient(player, ...) o RemoteFunction:FireAllClients(...).
- RemoteFunction.OnServerInvoke , que llama a la función cuando un cliente llama RemoteFunction:InvokeServer(...) .
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 = 4print( 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