Fonctions

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Les fonctions sont des blocs de code que vous pouvez exécuter plusieurs fois à la commande.Vous pouvez également les connecter à événements ou les attribuer en tant que rappels.

Fonctions de base

Une définition de fonction inclut :

  • La portée de la fonction (globale ou ).
  • La function clé mot.
  • Le nom de la fonction dans camelCase.
  • Les paramètres de la fonction entre parenthèses ( () ).
  • Le bloc de code, ou « corps », de la fonction.
  • La end clé mot.

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 à la place d'une variable.


-- Cette fonction n'a pas de paramètres et renvoie nil
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 mettez à disposition de la fonction et ne sont utilisés que dans le domaine de la fonction scope.Les fonctions n'ont pas de paramètres par défaut.Si vous appelez une fonction avec plus de paramètres qu'elle ne s'attend, Luau ignore les paramètres supplémentaires.Si vous appelez une fonction avec moins de paramètres qu'elle ne 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, la balise return retourne un résultat d'une simulation.Vous pouvez retourner plusieurs valeurs à partir d'une seule fonction.return finit l'exécution de la fonction, et Luau s'attend à ce que la clé end suive les déclarations return, donc écrire du code entre la commande return et la commande end lance une erreur.


-- 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 : somme et différence
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- Appeler une fonction et 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 table .Ils s'attendent à l'objet lui-même ( self ) comme premier argument.Lorsque vous appelez une méthode, utilisez la notation colon ( : ) au lieu de la notation point ( . ) pour transmettre self en tant que premier argument automatiquement.

Tous les objets dans Roblox descendent de Instance et ont des méthodes couramment utilisées, y compris Instance:Destroy(), Instance:Clone() et Instance:FindFirstChild().


local Workspace = game:GetService("Workspace")
-- Détruire une partie avec une notation de point (fonction)
local firstPart = Instance.new("Part")
firstPart.Parent = Workspace
print(firstPart.Parent) -- Workspacede travail
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- néant
-- Détruire une partie avec une notation de colon (méthode)
local secondPart = Instance.new("Part")
secondPart.Parent = Workspace
print(secondPart.Parent) -- Workspacede travail
secondPart: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 méthode comme valeur.Dans la définition de la méthode, le paramètre self fait référence à la table parent de la méthode.Lorsque vous appelez une méthode en utilisant la notation colon, vous transmettez 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 énumérer après le paramètre self.

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 se réfère à la table parent de la méthode en imprimant la valeur de self.enabled .


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 de rappel

Les rappels sont des fonctions qui s'exécutent en réponse à une autre fonction ou processus.

Appels de base

Les fonctions peuvent être transmises à d'autres fonctions, par exemple, une fonction anonyme peut être utilisée pour implémenter un rappel qui ensuite utilise pour trier une liste de à partir de .


local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Utiliser un rappel anonyme pour trier les joueurs par nom
return a.Name < b.Name
end)

Dans l'API Roblox, les rappels se réfèrent à un membre de fonction d'écriture uniquement, les rappels sont rendus jusqu'à leur retour. Les rappels largement utilisés incluent :

Pour définir un rappel, attribuez-lui une fonction.Par exemple, BindableFunction.OnInvoke est un rappel de BindableFunction.Vous pouvez définir une fonction nommée ou anonyme à elle, et vous pouvez l'appeler ( invoquer ) cette fonction en appelant la méthode sur le rappel.Les arguments que vous passez à :Invoke() en avant à la fonction de rappel, et la valeur de retour de la fonction de rappel retourne au rappelant de :Invoke() .


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

Techniques de fonction

Traiteurs d'événements

Vous pouvez attribuer une fonction, appelée un gestionnaire d'événement , à 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 tout joueur qui se joint.Pour plus d'informations, voir événements .


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, connues sous le nom de fonctions anonymes , pour les utiliser comme rappels et gestionnaires d'événements .Comme les fonctions nommées, les fonctions anonymes doivent commencer et se terminer par les mots-clés function et end, mais vous n'avez pas besoin de la clé local pour indiquer la portée locale car elles ont toujours une portée locale.

Dans l'exemple suivant, le rappel de la fonction task.delay() et le gestionnaire d'événement pour l'événement Players.PlayerAdded sont tous deux des fonctions anonymes.


-- Fonction anonyme dans un rappel de task.delay()
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 les scripts de module

Vous pouvez réutiliser des fonctions à travers plusieurs scripts en les stockant dans ModuleScripts .Les fonctions sont un taperde données Luau, vous pouvez donc les stocker dans des tables avec d'autres données.

Fonctions variées

Une fonction variatique accepte n'importe quel nombre d'arguments. Par exemple, Globals.LuaGlobals.print() est une fonction variatique.


print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4
print(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 variées

Pour définir une fonction variatique, vous utilisez le jeton comme dernier ou seul paramètre (ne pas confondre avec , l'opérateur de concaténation ).Vous pouvez mettre les valeurs ... dans une table pour faciliter l'utilisation.


local function variadic(named, ...)
local arguments = {...} -- emballer les arguments supplémentaires dans une table
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
]]

Arguments en avant

Vous pouvez définir des fonctions variées en tant que wrapper autour d'autres fonctions pour passeou transférer des arguments du wrapper aux 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 fonction variatique avec des tableaux

Si vous voulez transmettre une table d' valeurs à une fonction variatique globale, comme print(), vous pouvez utiliser la fonction globale unpack() pour transmettre 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