A variable est une valeur nommée dans un script qui peut contenir une valeur. Si vous essayez d'accéder à une variable qui n'a pas encore été définie, vous obtiendrez la valeur nil.
1 impression (variable) -- néant
Contrairement à d'autres langages, Lua n'est pas fortement typé, et il est plutôt dynamiquement typé. Cela vous donne beaucoup plus de liberté que les langages fortement typés, tels que Java, C++ ou C. Vous pouvez affecter n'importe quelle valeur de n'importe quel type à n'importe quelle variable, qu'elle soit définie ou non !
Contenu
- 1 Types de données
- 2 Scope
- 2.1 Variables normales
- 2.2 Variables locales
- 2.3 Variables globales
- 2.4 Champs du tableau
- 3 Utilisation des tableaux
- Tables 3.1
- 3.1.1 Pour et les tableaux
- 3.2 Variables de fonction
- Tables 3.1
- Références 4
Types de données
Les types de données ne sont que ce que leur nom l'indique, des types de données ! Dans Roblox, nous avons accès à plusieurs types de données :
Type | Détails |
---|---|
Boolean | Représente vrai ou faux |
Fonction | Une fonction que vous pouvez appeler |
Néant | Rien, nul |
Numéro | Utilisé pour stocker des nombres |
Chaîne | Utilisé pour stocker des textes, une chaîne de caractère Ex : "omg" |
Tableau | Un groupe d'articles |
Monter | Une coroutine |
Données d'utilisateur | Valeurs non faites en Lua |
Portée
Variables normales
Les variables normales sont accessibles à partir de n'importe quelle partie d'un script (vous ne pouvez pas utiliser une variable avant de lui affecter une valeur, mais elle renvoie nil), mais ne peuvent pas être partagées entre les scripts. Les variables normales ne doivent jamais être utilisées car elles sont plus lentes que les variables locales et n'offrent aucun avantage par rapport aux variables locales.[1]
1 --Un exemple de variable normale 2 3 pi = math.pi 4 5 print(pi) -- 3.1415926535898
Variables locales
Les variables locales ont une portée et ne peuvent être utilisées qu'à l'intérieur de leur portée ou en tant que valeurs supérieures. Vous ne pouvez avoir que 200 variables locales à la fois (car Lua a un maximum de 200 registres), mais il est presque impossible d'atteindre cela si vous codez de manière normale.
Les variables locales peuvent être distinguées des variables globales en raison du mot local placé avant leurs noms définis.
1 --Un exemple de variable locale 2 3 pi local = math.pi 4 5 print(pi) --3.1415926535898
Les variables normales peuvent être utilisées entre les portées, tandis que les variables locales n'existent qu'à l'intérieur de la portée. Une portée est par exemple une boucle ou une fonction
1 Foo = "bar" -- Crée une variable globale 2 fonction DoStuff() 3 local Foo = "pas bar" 4 print(Foo) 5 end 6 fonction DoOtherStuff() 7 Foo = "ceci est bar" 8 end 9 DoStuff( ) -- pas la barre 10 print(Foo) -- la barre 11 DoOtherStuff() 12 print(Foo) -- c'est la barre
Variables globales
Les variables globales peuvent être utilisées entre les scripts. En d'autres termes, pouvez-vous effacer une variable dans un script et obtenir sa valeur dans un autre script. Pour pouvoir créer des variables globales, vous devez accéder à la table globale. _G Si vous voulez créer une variable globale, ajoutez simplement cette valeur à la table globale :
1 _G["MaVariable"] = "Ceci est la valeur"
Et puis vous pouvez le faire dans un autre script :
1 print( _G.MyVariable) -- C'est la valeur
Vous devez vous assurer que le premier script s'exécute en premier, vous pouvez le faire en ajoutant un "wait()" sur la ligne supérieure du deuxième script. Vous pouvez également créer des fonctions globales.
1 _G["MaFonction"] = function() print("C'est la fonction") end
Et dans un autre script :
1 _G.MaFonction()
Plus d'informations sur la façon dont vous utilisez les tableaux :
Champs du tableau
Les champs de table, bien qu'ils se comportent différemment des variables normales et des variables locales, sont toujours des variables.[2]
Utilisation de tableaux
Tables
Les tables sont des groupes de champs accessibles à l'aide de la table. Pour construire une table, démarrez le devoir comme d'habitude...
1 local a =
Et puis utilisez des accolades pour montrer qu'il s'agit d'un tableau :
1 local a = {}
Pour ajouter des éléments à la table directement dans le constructeur de table, listez-les dans l'ordre, comme ceci :
1 local a = {1,2,3}
Pour accéder à un élément d'une table, nous utilisons ce qu'on appelle un index, qui est en quelque sorte un nom de fichier sur un ordinateur.
Pour trouver la variable à un certain index, vous utilisez les opérateurs d'index, [] et le nom de la table, comme ceci :
1 tableName locale = {1,2,3} 2 3 print(tableName[index])
Maintenant, ce code ne fonctionnerait pas car vous ne pouvez pas indexer une table avec nil, mais vous pouvez l'indexer avec tout le reste, comme cet exemple :
1 tableName local = {} 2 3 tableName[Workspace] = "Workspace" 4 5 tableName[game] = "game" 6 7 print(tableName[Workspace])
En utilisant cette méthode, vous pourriez obtenir des clients de chat de joueur, des outils, n'importe quoi !
Pour et tableaux
Pour parcourir une table, vous pouvez utiliser la boucle for :
1 local a = {1,2,3,4,5,6,7,8,9,10} 2 pour i=1, 10 do 3 print(a[i]) 4 end
Quelques sorties :
1
2
3
4
Cependant, parfois, vous ne savez pas quelle est la taille d'une table, une méthode consiste à parcourir la table jusqu'à ce que vous atteigniez une valeur nulle :
1 local a = {2,3,4,2,4,3,4,2,3,43,2,4,3,4,2,3,4,2,3} 2 pour i=1, math .huge do 3 if a[i] == nil then break end 4 print(a[i]) 5 end
Cependant, cette méthode est très inefficace et pourrait casser trop tôt, voire pas du tout, comme sur cette table :
1 local a = {1,2,3,4,2,5,nil,3,4,2,5} 2 pour i=1, math.huge do 3 si a[i] == nil then break end 4 print(a[i]) 5 fin
Pour éviter cela, nous utilisons l'opérateur de longueur, #
1 local a = {2,3,4,2,5,nil,3,4,2,34,2} 2 pour i=1, #a do 3 print(a[i]) 4 end
Cela saute la vérification manuelle que nous devions faire auparavant et nous indique la longueur de la table. Cela pourrait être utilisé pour sélectionner des joueurs aléatoires, comme ceci :
1 PlayerList local = game.Players:GetChildren() 2 local RandomPlayer = PlayerList[math.random(1,#PlayerList)]
Vous pouvez également utiliser l'opérateur de longueur pour obtenir le nombre de pièces au niveau supérieur de l'espace de travail :
1 impression(#Workspace:GetChildren())
Comme vous le savez peut-être, le code précédent fonctionne car nous obtenons la longueur de la table renvoyée, pas l'espace de travail. Veuillez noter que l'opérateur de longueur ne fonctionne pas directement sur les données utilisateur [objets roblox, instances].
Variables de fonction
Les fonctions sont les tables de code, ou en d'autres termes, des groupes de code. Les fonctions sont les blocs de construction, et les organisateurs de code fournissent un moyen de réutiliser le code encore et encore sans avoir à le taper tout entier. Les fonctions sont également utilisées pour obtenir des enfants de manière récursive, définir des propriétés, calculer des choses et d'autres divertissements truc. Voici un exemple de fonction :
1 fonction a() 2 3 fin
Puisque les fonctions peuvent calculer des choses, pourquoi ne créons-nous pas une fonction qui renvoie une valeur ?
1 local b = 0 2 fonction a() 3 b = b + 1 4 fin 5 print(b) 6 a() 7 print(b)
Hmm... Cette fonction pourrait être meilleure, utilisons le mot-clé return !
1 local b = 0 2 fonction a() 3 b = b + 1 4 return b 5 end 6 print(a(), a(), a(), a())
La raison pour laquelle nous avons d'abord ajouté à notre variable b est qu'une fois que vous revenez d'une fonction, votre fonction cesse de fonctionner.
1 fonction a() 2 si vrai alors retourne end 3 print("Ceci ne sera jamais exécuté.") 4 end 5 a()
Dans le code ci-dessus, la fonction a revient avant d'accéder à l'appel de la fonction print. Cela signifie que vous ne verrez pas l'impression à moins que vous ne supprimiez le retour.
Une autre chose que vous devez savoir sur le mot-clé de retour est que vous ne pouvez le placer qu'avant un mot-clé de fin. Placer un retour au milieu de votre code n'est autorisé que si vous placez le retour à l'intérieur d'une instruction [quelque chose qui utilise une fin].
1 fonction a() 2 do return end 3 print("Vous ne verrez pas ceci. Le retour est à l'intérieur d'une instruction do.") 4 end 5 a() 6 7 --- Et un exemple cassé 8 function a() 9 return 10 print("Ce code sera une erreur.") 11 end 12 a()
Comme vous pouvez le voir, le deuxième exemple ne fonctionne pas car nous avons un retour au milieu. Cela rend non seulement le code plus difficile à lire, mais cela provoque également une erreur.
Références
- ↑ Roberto Ierusalimschy Lua Conseils de performance
- R. Ierusalimschy, LH de Figueiredo, W. Celes; Manuel de référence Lua 5.1, Lua.org, août 2006 ; ISBN 85-903798-3-3