Funções são blocos de código que você pode executar várias vezes em comando. Você também pode conectá-los a eventos ou atribuí-los como 0> chamadas de retorno de chamada0>.
Funções Básicas
A definição de uma função inclui:
- O escopo da função (geral ou local).
- A palavra-chave function.
- O nome da função em camelCase .
- Os parâmetros da função em pêndulo ( () ).
- O bloco de código, ou "corpo", da função.
- A palavra-chave end.
O corpo da função é executado quando você chama a função. Para chamar uma função, digite seu nome seguido por aspas. Você pode definir uma variável para aceitar o valor de retorno ou usar o valor de retorno em vez de uma variável.
-- Essa função não tem parâmetros e retorna nil
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- Chamando uma função sem retornar
addOneAndTwo() -- 3
Parâmetros
Os parâmetros são variáveis que você torna disponíveis para a função e são usados apenas no âmbito da função. As funções não têm parâmetros por padrão. Se você chamar uma função com mais parâmetros do que ela espera, o Luau ignora os parâmetros extras. Se você chamar uma função com menos parâmetros do que ela espera, o Luau passa nil para todos os parâmetros perdidos.
-- Essa função tem dois parâmetros: num1 e 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
Voltar
No corpo da função, a palavra-chave return retorna um resultado de uma calculadora. Você pode retornar vários valores de uma função. return termina a execução da função, e o Luau espera que a palavra-chave end siga as declarações 1> return
-- Essa função retorna um valor de retorno
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
-- Essa função retorna vários valores: som e diferença
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- Chamando uma função e esperando vários valores de retorno
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1
Métodos
Métodos são funções que são membros de um Objeto, como uma classe ou tabela. Eles esperam que o próprio objeto seja o primeiro argumento. Quando você chama um método, use a notação de ponto ( self ) em vez da notação de vídeo ( 2> ) para passar5> self5> como o primeiro argument
Todos os objetos no Roblox descendem de Instance e têm métodos comumente usados, incluindo Instance:Destroy(), Instance:Clone() e 1> Class.Instance:FindFirstChild()1>.
-- Destruindo uma Peça com notação de ponto (função)local firstPart = Instance.new("Part")firstPart.Parent = workspaceprint(firstPart.Parent) -- Espaço de TrabalhofirstPart.Destroy(firstPart)print(firstPart.Parent) -- nada-- Destruindo uma Peça com notação de ponto (método)local secondPart = Instance.new("Part")secondPart.Parent = workspaceprint(secondPart.Parent) -- Espaço de TrabalhosecondPart:Destroy()print(secondPart.Parent) -- nil
Definindo Métodos
Para criar um método em uma tabela, use o nome do método como a chave e a função do método como o valor. Na definição do método, o parâmetro self refere-se à tabela de pais do método. Quando você chama um método usando ponto de interrogação, você passa a tabela em si mesma como primeiro argumento. Você pode definir parâmetros para um método, mas você precisa list
No seguinte exemplo, a tabela testButton tem um método como o valor da chave changeEnabled. Você pode verificar que self está se referindo à tabela de paiso da método ao imprimir o valor de 2>self.enabled2>.
local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- verdade
-- Chame o método
testButton:changeEnabled(false) -- false
Chamadas
Callbacks são funções que são executadas em resposta a outra função ou processo.
Chamadas Básicas
Funções podem ser passadas para outras funções, por exemplo, uma função anônima pode ser usada para implementar um retorno de chamada que table.sort() e, em seguida, usa para classificar uma lista de Players a partir de 2> Class.Players.GetPlayers()2>.
local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Use um retorno de chamada anônimo para classificar os jogadores por nome
return a.Name < b.Name
end)
Na API (Interface de Programação para Aplicações)do Roblox, chamadas retornaraté que sejam retornadas. Chamadas amplamente usadas incluem:
- MarketplaceService.ProcessReceipt, que processa compras de produtos do desenvolvedor.
- BindableFunction.OnInvoke, que chama a função quando um script chama BindableFunction:Invoke(...).
- RemoteFunction.OnClientInvoke, que chama a função quando o servidor chama RemoteFunction:FireClient(player, ...) ou RemoteFunction:FireAllClients(...).
- RemoteFunction.OnServerInvoke, que chama a função quando um cliente chama RemoteFunction:InvokeServer(...).
Para definir um retorno de chamada, atribua uma função a ele. Por exemplo, BindableFunction.OnInvoke é uma função de BindableFunction. Você pode definir uma função nomeada ou
local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84
Técnicas de Função
Geradores de Eventos
Você pode atribuir uma função, conhecida como um gerador de eventos, para ser executado quando um evento é disparado. Por exemplo, você pode criar uma função chamada onPlayerAdded() para o evento Players.PlayerAdded para imprimir o nome de qualquer jogador que se juntar. Para mais informações, see 2> Eventos2> .
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)
Funções Anônimas
Você pode criar funções sem nomes, conhecidas como funções anônimas, para usar como chamadas e 处理adores de eventos. Como funções nomeadas, funções anônimas precisam começar e terminar com as palavras-chave 2>function2> e 5>terminar/parar/sair5>, mas você não precisa do
No seguinte exemplo, o retorno de chamada para a função task.delay() e o evento gerenciador de eventos para o evento Players.PlayerAdded são ambas funções anônimas.
-- Função anônima em um retorno de chamada para task.延遲()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- Função anônima em um gerenciador de eventos
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)
Funções em Scripts de Módulo
Você pode reutilizar funções em vários scripts armazenando-as em ModuleScripts. Funções são um digitarde dado Luau, então você pode armazená-las em tabelas com outros dados.
Funções Variante
Uma função variável aceita qualquer número de argumentos. Por exemplo, Globals.LuaGlobals.print() é uma função variável.
print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4print(string.format("The %s is a %s!", "cake", "lie")) -- O bolo é uma mentira!print(string.char(115, 101, 99, 114, 101, 116)) -- secret
Definindo Funções Variadas
Para definir uma função variável, você usa o token ... como o último ou único parâmetro (não confundir com .., o operador de concatação operador). Você pode colocar os valores 2>...2> na tabela para facilitar o uso.
local function variadic(named, ...)
local arguments = {...} -- empacotar os argumentos extras em uma tabela
print("Named argument =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "Hi", 20, "Variadic Function")
--[[ Resultado da saída:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]
Avanço de Argumento
Você pode definir funções variáveis como wrappers ao redor de outras funções para passe, ou forward, argumentos do wrappers para as outras funções.
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 da saída:
Before
x = 1
y + z = 5
After
]]
Chamando uma Função Variável com Arrays
Se você quiser passar um array de valores de uma matriz de tabelas para uma função global de variadic, como print(), você pode usar a função global unpack() para passar os valores da tabela em vez da tabela em si.
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