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 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 = workspace
print(firstPart.Parent) -- Espacio de trabajo
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- nulo
-- Destruir una Parte con notación de colon (método)
local secondPart = Instance.new("Part")
secondPart.Parent = workspace
print(secondPart.Parent) -- Espacio de trabajo
secondPart: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:

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 = 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

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