Les fonctions sont des blocs de code que vous pouvez exécuter plusieurs fois sur commande. Vous pouvez également les connecter à événements ou les attribuer comme rappels.
Fonctions de base
Une définition de fonction inclut :
- La porte d'œil de la fonction (globale ou local ).
- La function mot-clé.
- Le nom de la fonction dans camelCase .
- Les paramètres de la fonction dans les parenthèses ( () ).
- Le bloc de code, ou « corps », de la fonction.
- La end mot-clé.
Le corps de la fonction s'exécute lorsque vous appelez la fonction. Pour appeler une fonction, tapez son nom suivi de parenthèses. Vous pouvez définir une variable pour accepter la valeur de retour ou utiliser la valeur de retour au lieu d'une variable.
-- Cette fonction n'a pas de paramètres et renvoie zéro
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- Appeler une fonction sans renvoyer
addOneAndTwo() -- 3
Paramètres
Les paramètres sont des variables que vous rendez disponibles à la fonction et ne sont utilisés que dans le champ d'application de la fonction. Les fonctions n'ont pas de paramètres par défaut. Si vous appelez une fonction avec plus de paramètres que ce à quoi elle s'attend, Luau ignore les paramètres supplémentaires. Si vous appelez une fonction avec moins de paramètres que ce à quoi elle s'attend, Luau passe nil pour tous les paramètres manquants.
-- Cette fonction a deux paramètres : num1 et 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
Retour
Dans le corps de la fonction, le mot-clé return retourne un résultat d'un calcul. Vous pouvez retourner plusieurs valeurs d'un fonction. return termine l'exécution du code, et Luau attend que le mot-clé end suive les déclarations 1> renvoyer1>, donc
-- Cette fonction renvoie une valeur de retour
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
-- Cette fonction renvoie plusieurs valeurs : la somme et la différence
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- Appeler une fonction et s'attendre à plusieurs valeurs de retour
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1
Méthodes
Les méthodes sont des fonctions qui sont des membres d'un objet, telles qu'une classe ou une tabelle. Elles attendent l'objet lui-même ( self ) comme premier argument. Lorsque vous appelez une méthode, utilisez la ponctuation ( 2> .2> ) au lieu de la ponctuation ( 5> 5> ) pour passer <
Tous les objets dans Roblox descendent de Instance et ont des méthodes couramment utilisées, y compris Instance:Destroy() , Instance:Clone() et 1> Class.Instance:FindFirstChild()1> .
-- Détruire une partie avec une note de point (fonction)local firstPart = Instance.new("Part")firstPart.Parent = workspaceprint(firstPart.Parent) -- Workspacede travailfirstPart.Destroy(firstPart)print(firstPart.Parent) -- zéro-- Destruction d'une partie avec une note de colon (méthode)local secondPart = Instance.new("Part")secondPart.Parent = workspaceprint(secondPart.Parent) -- Workspacede travailsecondPart:Destroy()print(secondPart.Parent) -- nil
Définir des méthodes
Pour créer une méthode dans une table, utilisez le nom de la méthode comme clé et la fonction de la méthode comme valeur. Dans la définition de la méthode, le self paramètre réfère à la table parent de la méthode. Lorsque vous appelez une méthode en utilisant la notification de colon, vous passez la table elle-même en tant que premier argument. Vous pouvez définir des paramètres pour une méthode, mais vous devez les lister
Dans l'exemple suivant, la table testButton a une méthode en tant que valeur de la clé changeEnabled. Vous pouvez vérifier que self réfère à la table parent de la méthode en imprimant la valeur de 2>self.enabled2>.
local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- vrai
-- Appeler la méthode
testButton:changeEnabled(false) -- false
Appels
Les appels sont des fonctions qui s'exécutent en réponse à une autre fonction ou processus.
Appels de base
Les fonctions peuvent être passées dans d'autres fonctions, par exemple, une fonction anonyme peut être utilisée pour implémenter un rappel que table.sort() puis utilise pour trier une liste de Players à partir de 2> Class.Players.GetPlayers()2>.
local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Utilisez un rappel anonyme pour trier les joueurs par nom
return a.Name < b.Name
end)
Dans l'API Roblox, les appels de rappel se réfèrent à un membre de la fonction unique d'écriture, les appels de rappel génèrent jusqu'à ce qu'ils renvoyer. Les appels de rappel largement utilisés incluent :
- MarketplaceService.ProcessReceipt , qui gère les achats de produits du développeur.
- BindableFunction.OnInvoke , qui appelle la fonction lorsqu'un script appelle BindableFunction:Invoke(...) .
- RemoteFunction.OnClientInvoke , qui appelle la fonction lorsque le serveur appelle RemoteFunction:FireClient(player, ...) ou RemoteFunction:FireAllClients(...).
- RemoteFunction.OnServerInvoke, qui appelle la fonction lorsqu'un client appelle RemoteFunction:InvokeServer(...).
Pour configurer un rappel, attribuez une fonction à celui-ci. Par exemple, BindableFunction.OnInvoke est un rappel de BindableFunction. Vous pouvez définir une fonction nommée ou an
local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84
Techniques de fonction
Gestionnaires d'événements
Vous pouvez attribuer une fonction, connue sous le nom d'un événement gestionnaire, pour s'exécuter lorsqu'un événement se déclenche. Par exemple, vous pouvez créer une fonction appelée onPlayerAdded() à l'événement Players.PlayerAdded pour imprimer le nom de n'importe quel joueur qui rejoint. Pour plus d'informations, voir 2>événements2>.
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)
Fonctions anonymes
Vous pouvez créer des fonctions sans nom, telles que les fonctions anonymes, à utiliser comme des appels et des gestionnaires d'événements, comme les fonctions nommées. Les fonctions anonymes doivent commencer et terminer avec les function et 2> end2> des mots-clés, mais vous n'avez pas besoin
Dans l'exemple suivant, le rappel pour la fonction task.delay() et le gestionnaire d'événements pour l'événement Players.PlayerAdded sont tous les deux des fonctions anonymes.
-- Fonction anonyme dans un rappel à task.延迟()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- Fonction anonyme dans un gestionnaire d'événements
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)
Fonctions dans ModuleScripts
Vous pouvez réutiliser des fonctions sur plusieurs scripts en les stockant dans ModuleScripts. Les fonctions sont un taperde données Luau, vous pouvez donc les stocker dans des tableaux avec d'autres données.
Fonctions varias
Une fonction variadique accepte n'importe quel nombre d' arguments. Par exemple, Globals.LuaGlobals.print() est une fonction variadique.
print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4print(string.format("The %s is a %s!", "cake", "lie")) -- Le gâteau est un mensonge !print(string.char(115, 101, 99, 114, 101, 116)) -- secret
Définir des fonctions varias
Pour définir une fonction variante, vous utilisez le jeton ... comme dernier ou seul paramètre (ne pas confondre avec .. , le concatenation opérateur). Vous pouvez mettre les valeurs 2>...2> dans un tableau pour faciliter l'utilisation.
local function variadic(named, ...)
local arguments = {...} -- pack les arguments supplémentaires dans un tableau
print("Named argument =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "Hi", 20, "Variadic Function")
--[[ Résultat de sortie:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]
Avancement des arguments
Vous pouvez définir des fonctions variante comme des enveloppes autour d'autres fonctions pour passe, ou avancer, des arguments duWrap à d'autres fonctions.
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)
--[[ Résultat de sortie:
Before
x = 1
y + z = 5
After
]]
Appeler une fonctionnalité variante avec des tableaux
Si vous voulez passer un tableau d' valeurs à une fonction globale de valeurs, telle que print(), vous pouvez utiliser la fonction globale unpack() pour passer les valeurs de la table au lieu de la table elle-même.
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