Funções

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

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 designá-los como callbacks.

Funções básicas

Uma definição de função inclui:

  • O escopo da função (global ou ).
  • A palavra-chave function.
  • O nome da função em camelCase .
  • Os parâmetros da função entre parênteses ( () ).
  • 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 de parênteses.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ê disponibiliza à função e são usados apenas no escopo da função scope.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, Luau passa nil por 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

Retornar

No corpo da função, a palavra-chave return retorna um resultado de uma computação.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 return , então escrever código entre o comando return e o comando end lança um erro.


-- 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: soma e diferença
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- Chamar uma função e esperar múltiplos 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 o próprio objeto ( self ) como o primeiro argumento.Quando você chamar um método, use a notação de vírgula ( : ) em vez da notação de ponto ( . ) para passar self como o primeiro argumento automaticamente.

Todos os objetos no Roblox descendem de Instance e têm métodos comumente usados, incluindo Instance:Destroy(), Instance:Clone() e Instance:FindFirstChild().


local Workspace = game:GetService("Workspace")
-- Destruindo uma parte com notação de ponto (função)
local firstPart = Instance.new("Part")
firstPart.Parent = Workspace
print(firstPart.Parent) -- Workspacede Trabalho
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- nenhum
-- Destruindo uma parte com notação de coluna (método)
local secondPart = Instance.new("Part")
secondPart.Parent = Workspace
print(secondPart.Parent) -- Workspacede Trabalho
secondPart:Destroy()
print(secondPart.Parent) -- nil

Definir métodos

Para criar um método em uma tabela, use o nome do método como chave e a função do método como valor.Na definição do método, o parâmetro self se refere à tabela pai do método.Quando você chama um método usando a notação de vírgula, você passa a própria tabela como o primeiro argumento.Você pode definir parâmetros para um método, mas precisa listá-los após o parâmetro self.

No seguinte exemplo, a tabela testButton tem um método como o valor da chave changeEnabled.Você pode verificar que self se refere à tabela pai do método imprimindo o valor de self.enabled .


local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- verdadeiro
-- Chame o método
testButton:changeEnabled(false) -- false

Chamadas de volta

Chamadas são funções que executam 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 então usa para classificar uma lista de de .


local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Use um retorno 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, os retornos de chamada se referem a um membrosde função apenas de leitura, os retornos de chamada são até retornados até que retornar. Os retornos de chamada amplamente utilizados incluem:

Para definir um retorno de chamada, atribua uma função a ele.Por exemplo, BindableFunction.OnInvoke é um retorno de chamada de BindableFunction.Você pode definir uma função nomeada ou anônima para ela e você pode chamá-la ( invocar ) essa função chamando o método na chamada de retorno.Os argumentos que você passa para :Invoke() para o retorno ao chamador da função de retorno e o valor de retorno da função de retorno retorna ao chamador de :Invoke() .


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

Técnicas de função

Processadores de eventos

Você pode atribuir uma função, conhecida como um processador de eventos , para ser executada 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 junte.Para mais informações, veja Eventos.


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 retornadores de chamadas e manipuladores de eventos .Como funções nomeadas, funções anônimas precisam começar e terminar com as palavras-chave function e end, mas você não precisa da palavra-chave local para indicar o escopo local porque elas sempre têm escopo local.

No seguinte exemplo, o retorno de chamada para a função task.delay() e o manipulador de eventos para o evento Players.PlayerAdded são ambos funções anônimas.


-- Função anônima em um retorno de chamada para task.delay()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- Função anônima em um manipulador 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 variativas

Uma função variada aceita qualquer número de argumentos. Por exemplo, Globals.LuaGlobals.print() é uma função variada.


print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4
print(string.format("The %s is a %s!", "cake", "lie")) -- O bolo é uma mentira!
print(string.char(115, 101, 99, 114, 101, 116)) -- secret

Definir funções variativas

Para definir uma função variada, você usa o token como o último ou único parâmetro (não confundir com , o operador de concatenação ).Você pode colocar os valores ... na tabela para facilitar o uso.


local function variadic(named, ...)
local arguments = {...} -- empacote 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")
--[[ saídaresultante:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]

Argumentos forwards

Você pode definir funções variáveis como envelopamentos em torno de outras funções para passeou encaminhar argumentos do envelopamento 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)
--[[ saídaresultante:
Before
x = 1
y + z = 5
After
]]

Chame uma função variada com arrays

Se você quiser passar um array de valores de uma tabela para uma função variada global, como print(), você pode usar a função global unpack() para passar os valores da tabela em vez da própria tabela.


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