Las funciones son bloques de código que puedes ejecutar varias veces en el comando. También puedes conectarlas a eventos o asignirlas como llamadas de retorno de código.
Funciones básicas
Una definición de función incluye:
- El alcance de la función (global o local).
- La palabra clave function
- El nombre de la función en camelCase .
- Los parámetros de la función en las parenteses ( () ).
- El bloque de código, o "cuerpo", de la función.
- La palabra clave end
El cuerpo de la función se ejecuta cuando llamas a la función. Para llamar una función, escribe su nombre seguido de signos de interrogación. Puedes definir una variable para aceptar el valor de regreso o usar el valor de regreso 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
-- Llamar a una función sin devolver
addOneAndTwo() -- 3
Parámetros
Los parámetros son variables que haces disponibles para la función y solo se usan en el alcance de la función. Las funciones no tienen parámetros por defecto. Si llamas a una función con más parámetros de los que espera, Luau ignora los parámetros adicionales. Si llamas a una función con menos parámetros de los que espera, Luau pasa nil por todos los parámetros perdidos.
-- Esta función tiene dos parámetros: num1 y num2
local function addNumbers(num1, num2)
print(num1 + num2)
end
addNumbers(2, 3) -- 5
addNumbers(5, 6, 7) -- 11
addNumbers(9) -- attempt to perform arithmetic (add) on number and nil
Regresar
En el cuerpo de la función, la palabra de función return devuelve un resultado de una computadora. Puedes devolver múltiples valores de una función. return termina la ejecución de la función, y Luau espera que la palabra de función end siga las declaraciones de 2>return2>,
-- Esta función regresa un valor de vuelta
local function addNumbers(num1, num2)
local result = num1 + num2
return result
end
print(addNumbers(1, 2)) -- 3
local seven = addNumbers(3, 4)
print(seven) -- 7
-- 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
-- Llamar a una función y esperar varios valores de regreso
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1
Métodos
Los métodos son funciones que son miembros de un objeto, como una clase o una tabla . Esperan que el propio objeto ( self ) como el primer argumento. Cuando llamas un método, usa la notación de colon ( 1> self 1> ) en lugar de la notación de punto ( 4> ) para pasar 7> self
Todos los objetos en Roblox se originan en Instance y tienen métodos comúnmente utilizados, incluido Instance:Destroy() , Instance:Clone() y 1> Class.Instance:FindFirstChild()1> .
-- Destruir 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) -- nulo-- Destruir una Parte con notación de colon (método)local secondPart = Instance.new("Part")secondPart.Parent = workspaceprint(secondPart.Parent) -- Espacio de trabajosecondPart:Destroy()print(secondPart.Parent) -- nil
Definiendo métodos
Para crear un método en una tabla, use el nombre del método como la clave y la función de método como el valor. En la definición del método, el parámetro self se refiere a la tabla padre del método. Cuando llama a un método usando la notación de colon, pasa la tabla en sí misma como el primer argumento. Puedes definir parámetros para un método, pero necesitas listarlos después del parámetro self</
En el siguiente ejemplo, la tabla testButton tiene un método como el valor de la llave changeEnabled. Puedes verificar que self se refiere a la tabla padre del método al imprimir el valor de 1> self.enabled1> .
local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- cierto
-- Llamar el método
testButton:changeEnabled(false) -- false
Llamadas
Las llamadas son funciones que se ejecutan en respuesta a otra función o proceso.
Llamadas básicas
Las funciones se pueden pasar a otras funciones, por ejemplo, una función anónima se puede usar para implementar un llamado que table.sort() y luego usa para sortear una lista de Players de 1> Class.Players.GetPlayers()1> .
local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Usa una llamada anónima para clasificar a los jugadores por nombre
return a.Name < b.Name
end)
En la API de Roblox, los llamados de retorno de llamada se refieren a un miembrosde función de solo escritura, los llamados de retorno de llamada se devolverhasta que sean devueltos. Los llamados ampliamente utilizados incluyen:
- MarketplaceService.ProcessReceipt , que maneja las compras de productos de desarrolladores.
- BindableFunction.OnInvoke , que llama a la función cuando un script llama a BindableFunction:Invoke(...) .
- RemoteFunction.OnClientInvoke , que llama la función cuando el servidor llama RemoteFunction:FireClient(player, ...) o RemoteFunction:FireAllClients(...) .
- RemoteFunction.OnServerInvoke , que llama a la función cuando un cliente llama a RemoteFunction:InvokeServer(...) .
Para devolución de llamadaun llamado, asigna una función a él. Por ejemplo, BindableFunction.OnInvoke es una función de BindableFunction . Puedes establecer una función nombrada o anón
local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84
Técnicas de función
Manipuladores de eventos
Puede asignar una función, conocida como un gestor de eventos, para que se ejecute cuando se activa un evento. Por ejemplo, puede crear una función llamada onPlayerAdded() para el evento Players.PlayerAdded para imprimir el nombre de cualquier jugador que se una. Para obtener más información, consulte 2>Eventos2> .
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)
Funciones anónimas
Puedes crear funciones sin nombres, conocidas como funciones anónimas , para usar como llamadas de retorno y manipuladores de eventos. Como las funciones nombradas, las funciones anónimas necesitan comenzar y terminar con las palabras clave 2>function2> y 5>finalizar5>, pero no necesitas la palabra cl
En el siguiente ejemplo, el llamado de función para la función task.delay() y el evento handler para el evento Players.PlayerAdded son ambas funciones anónimas.
-- Función anónima en una llamada a task.延迟()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- Función anónima en un gestor de eventos
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)
Funciones en ModuleScripts
Puedes reutilizar funciones en múltiples scripts al almacenarlas en ModuleScripts . Las funciones son un introducirde datos Luau, por lo que puedes almacenarlas en tablas con otros datos.
Funciones de Variadic
Una función de variadic acepta cualquier número de argumentos. Por ejemplo, Globals.LuaGlobals.print() es una función de 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
Definiendo Funciones Variadicas
Para definir una función variadica, usa el token de ... como último parámetro (no confundirse con .., el operador de concatenación operador). Puedes poner los valores de 2>...2> en una tabla para usarlos con facilidad.
local function variadic(named, ...)
local arguments = {...} -- empaqueta los argumentos extra 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")
--[[ Resultado de Salida:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]
Adelante de argumento
Puedes definir funciones varias como envolturas alrededor de otras funciones para pase, o avanzar, argumentos del envoltor 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)
--[[ Resultado de Salida:
Before
x = 1
y + z = 5
After
]]
Llamar una función de variadic con matrizes
Si desea pasar un matríz de valores a una función global de variadic, como print(), puede usar la función global de 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