Fonctions en Lua

Table des matières
Les fonctions sont le mécanisme principal pour l'abstraction des déclarations et des expressions dans Lua, ils peuvent effectuer des tâches spécifiques, qui sont généralement appelées procédures ou sous-routines dans d'autres langages.
Les fonctions sont la plupart du temps écrites avec des parenthèses et une liste d'arguments qui lui permettront d'effectuer une action spécifique, où il se peut que ces fonctions n'aient pas besoin d'arguments, cependant les parenthèses doivent être spécifiées, voyons un exemple de fonctions que nous utilisons comme expressions à l'intérieur Lua:

Comme nous pouvons le voir, nous pourrions utiliser les fonctions des deux manières décrites, mais il existe un cas particulier où la fonction a un seul argument et cet argument est un littéral de chaîne ou un constructeur pour une table ou un tableau, dans ce cas les parenthèses sont facultatives, voyons :
 print "Hello World" print ("Hello World") dofile 'file.lua' dofile ('file.lua') print [[msg tableau multi-lignes]] print ([[msg tableau multi-lignes]]) f { var1 = 17, var2 = 30} f ({var1 = 17, var2 = 30}) type {} type ({})
D'après l'exemple, nous avons pu écrire les fonctions dans les deux sens, celles-ci étant également valables.
Un programme en Lua Vous pouvez utiliser des fonctions définies à la fois en C et dans le langage lui-même, par exemple, toutes les fonctions standard de la bibliothèque de Lua sont écrits en C, ce qui n'est pas pertinent pour les développeurs, car l'invocation des deux n'a aucune différence.
Sachant cela, la définition ne diffère pas des autres langages, la syntaxe conventionnelle d'une fonction est régie par le nom de la fonction, une liste de paramètres et le corps de la fonction, qui est une liste de déclarations, voyons un exemple pour illustrer ce qui a expliqué :
 fonction opération (var) somme locale = 0 somme = var + 6 retour somme fin
Nous avons déjà notre fonction, mais de cette façon, elle n'est pas très utile, car elle doit être invoquée en envoyant le paramètre dont elle a besoin, pour cela nous pouvons ajouter une ligne de plus à notre code pour l'invoquer :
 fonction opération (var) somme locale = 0 somme = var + 6 retour somme fin impression (opération (57))
Si nous exécutons notre exemple dans notre terminal, nous pouvons voir comment notre programme reçoit le paramètre et selon les opérations définies dans notre fonction, il renvoie une valeur :

AGRANDIR

Quelque chose que nous pouvons mettre en évidence à partir des fonctions dans Lua, c'est que les paramètres fonctionnent comme des variables locales, puisqu'ils sont initialisés avec les valeurs qu'ils reçoivent dans l'appel de fonction. En plus de cela, nous pouvons invoquer une fonction avec un nombre différent d'arguments définis dans la fonction, Lua s'adapte à cela de la même manière qu'avec l'affectation multiple, un sujet que nous avons couvert dans le dernier didacticiel, où les arguments supplémentaires sont supprimés et les paramètres supplémentaires obtiennent le type de valeur néant, par exemple imaginons que nous ayons la fonction suivante :
 fonction fonction_multiple (a, b) renvoie a ou b fin
Voyons comment, dans la partie de code suivante, nous appelons la fonction avec différents paramètres et à droite comment l'affectation est effectuée :
 f (8) a = 8, b = nil f (8, 15) a = 8, b = 15 f (8, 15, 4) a = 8, b = 15 (La valeur 4 est ignorée)
Bien que ce comportement puisse conduire à des erreurs de programmation, il est également utile, en particulier pour les arguments par défaut.
Une fonctionnalité non conventionnelle mais très utile de Lua, est la possibilité de renvoyer plusieurs résultats, même les fonctions de langage prédéfinies peuvent le faire. Un exemple de ceci est la fonction chaîne.trouver, qui recherche un motif d'occurrence dans une chaîne donnée, cette fonction retourne deux index, le premier est l'index où commence ce motif et le second est où il se termine, voyons un exemple pratique d'utilisation de cette fonction que l'on peut faire parfaitement dans notre console interactive :

Les fonctions dans lesquelles nous écrivons Lua ils peuvent aussi revenir plusieurs résultats, pour cela, nous n'avons qu'à les lister après notre retour, voyons un exemple où nous créons une fonction pour localiser le plus grand d'une liste d'éléments dans un tableau et sa position dans celui-ci :
 fonction valeur maximale (a) local minimum = 1 local m = a [minimum] pour i, val en paires (a) faire si val> m alors minimum = i; m = val end end return m, impression de fin minimale (valeur maximale ({8,10,23,12,5}))
Comme nous pouvons le voir, notre fonction est assez simple et dans notre retour, elle renvoie deux valeurs, qui dans ce cas, selon ce que nous envoyons, nous devrions renvoyer 23 comme plus grand nombre et 3 comme position, voyons :

AGRANDIR

En plus de la fonctionnalité de renvoi de plusieurs résultats, Lua vous pouvez également recevoir un nombre variable d'arguments, par exemple tout au long des tutoriels, nous avons utilisé la fonction imprimer avec un, deux et jusqu'à trois arguments, c'est-à-dire qu'il peut recevoir un nombre variable d'arguments, mais comme cela le fait, les fonctions que nous développons dans Lua, Regardons un exemple de ceci :
 fonction example_function (…) local s = 0 pour i, v in ipairs {…} do s = s + v end return s end print (example_function (8, 19, 30, 14, 10))
Si nous sommes des observateurs dans la définition de notre fonction nous avons trois points (… ) à l'intérieur des parenthèses, cela indique que notre fonction accepte un nombre variable d'arguments, et lorsque la fonction est appelée tous les arguments envoyés sont collectés en interne puis traités avec la fonction pairesVoyons la sortie de notre fonction qui se charge d'ajouter tous les arguments qui lui sont envoyés :

AGRANDIR

Comme nous voyons cette caractéristique de Lua C'est assez utile car cela nous permet de définir notre fonction sans savoir combien d'arguments on va lui passer, on peut même dire que cette fonctionnalité est un peu similaire à ce qu'on fait avec le déclarations préparées pour gérer les opérations avec Database dans des langages comme PHP ou alors Java.
Envoi d'arguments dans Lua il est positionnel, c'est-à-dire que lorsque nous invoquons une fonction, ces arguments correspondent aux paramètres en fonction de leurs positions, le premier argument correspond au premier paramètre et ainsi de suite, bien que parfois cela ne fasse pas de mal de spécifier les arguments par leur nom.
Cette fonctionnalité est similaire aux arguments variables, cependant lors de la définition des noms de nos arguments, leur gestion est beaucoup plus simple, où juste en utilisant une table ou un arrangement, nous pouvons faire cette fonctionnalité, quelque chose qui est très utile si notre fonction utilise certains de ces paramètres en option, voyons l'appel suivant à une fonction qui reçoit un certain nombre de paramètres pour construire une fenêtre :
 create_window {x = 0, y = 0, width = 0, height = 200, title = 'Lua Window', background = "blue", border = true}
De cette façon, la fonction créer_fenêtre Vous êtes libre de vérifier ces arguments par leur nom si vous le souhaitez, voyons comment nous recevons ces arguments dans notre fonction et ce que nous pouvons en faire :
 fonction create_window (options) - vérifier les options obligatoires if type (options.title) ~ = "string" then error ("pas de titre") elseif type (options.width) ~ = "number" then error ("pas de mesure de largeur " ) elseif type (options.height) ~ =" nombre "puis erreur (" pas de mesure de hauteur ") fin - nous appliquons les options create_window (options.title, options.x ou 0, options.y ou 0, options .width, options.height, options.background ou "white", options.edges) Fin
Comme nous pouvons le voir, les possibilités de nos programmes sont beaucoup plus grandes avec cette fonctionnalité, et bien que cet exemple soit illustratif, il nous permet de voir comment nous pouvons appliquer les arguments nommés dans nos fonctions.
C'est ainsi que nous terminons ce tutoriel, où nous avons appris à gérer les fonctions dans Lua, allant de la syntaxe conventionnelle que l'on peut trouver dans d'autres langages aux caractéristiques du langage telles que les résultats multiples, les arguments variables et la possibilité de nommer les arguments que nous envoyons à nos fonctions. De cette façon, ajouter beaucoup plus de puissance à nos programmes en incluant ces types de fonctionnalités et en maintenant la simplicité à laquelle Lua nous y sommes habitués.Avez-vous aimé et aidé ce tutoriel ?Vous pouvez récompenser l'auteur en appuyant sur ce bouton pour lui donner un point positif
wave wave wave wave wave