Functies in Lua

Inhoudsopgave
Functies zijn het belangrijkste mechanisme voor de abstractie van declaraties en uitdrukkingen in Lua, kunnen ze specifieke taken uitvoeren, die in andere talen meestal procedures of subroutines worden genoemd.
De functies worden meestal geschreven met haakjes en een lijst met argumenten waarmee het een specifieke actie kan uitvoeren, waarbij het kan zijn dat deze functies geen argumenten nodig hebben, maar de haakjes moeten worden opgegeven, laten we een voorbeeld bekijken van functies die we gebruiken als uitdrukkingen binnen Lua:

Zoals we kunnen zien, kunnen we functies op beide beschreven manieren gebruiken, maar er is een speciaal geval waarin de functie een enkel argument heeft en dat argument een letterlijke tekenreeks of een constructor voor een tabel of array, in dit geval zijn de haakjes optioneel, laten we eens kijken:
 print "Hello World" print ("Hello World") dofile 'file.lua' dofile ('file.lua') print [[multi-line array msg]] print ([[multi-line array msg]]) f { var1 = 17, var2 = 30} f ({var1 = 17, var2 = 30}) type {} type ({})
Volgens het voorbeeld konden we de functies op beide manieren schrijven, aangezien deze even geldig zijn.
Een programma in Lua U kunt functies gebruiken die zowel in C als in de taal zelf zijn gedefinieerd, bijvoorbeeld alle standaardfuncties in de bibliotheek van Lua zijn geschreven in C, wat niet relevant is voor ontwikkelaars, omdat het aanroepen van beide geen verschil maakt.
Dit wetende, verschilt de definitie niet van andere talen, de conventionele syntaxis van een functie wordt bepaald door de naam van de functie, een lijst met parameters en de hoofdtekst van de functie, wat een lijst met declaraties is, laten we een voorbeeld bekijken om illustreren wat is uitgelegd:
 functie bewerking (var) lokale som = 0 som = var + 6 retoursom end
We hebben onze functie al, maar op die manier is het niet erg handig, omdat het moet worden aangeroepen door de parameter te verzenden die het nodig heeft, daarvoor kunnen we nog een regel aan onze code toevoegen om het aan te roepen:
 functie bewerking (var) lokale som = 0 som = var + 6 retoursom end print (bewerking (57))
Als we ons voorbeeld in onze terminal uitvoeren, kunnen we zien hoe ons programma de parameter ontvangt en volgens de bewerkingen die in onze functie zijn gedefinieerd, retourneert het een waarde:

VERGROTEN

Iets dat we kunnen benadrukken uit de functies in Lua, is dat de parameters werken als lokale variabelen, omdat ze worden geïnitialiseerd met de waarden die ze ontvangen in de functieaanroep. Daarnaast kunnen we een functie aanroepen met een ander aantal argumenten gedefinieerd in de functie, Lua past zich hieraan aan op een manier die het doet met meerdere toewijzingen, een onderwerp dat we in de vorige zelfstudie hebben behandeld, waarbij de extra argumenten worden weggegooid en de extra parameters het waardetype krijgen nul, laten we ons bijvoorbeeld voorstellen dat we de volgende functie hebben:
 functie multiple_function (a, b) retourneer a of b end
Laten we eens kijken hoe we in het volgende codegedeelte de functie met verschillende parameters aanroepen en aan de rechterkant hoe de toewijzing wordt uitgevoerd:
 f (8) a = 8, b = nul f (8, 15) a = 8, b = 15 f (8, 15, 4) a = 8, b = 15 (De waarde 4 wordt weggegooid)
Hoewel dit gedrag kan leiden tot programmeerfouten, is het ook nuttig, vooral voor standaardargumenten.
Een onconventionele maar best nuttige functie van Lua, is de mogelijkheid om meerdere resultaten te retourneren, zelfs voorgedefinieerde taalfuncties kunnen dit. Een voorbeeld hiervan is de functie string.find, die zoekt naar een patroon van voorkomen in een gegeven string, deze functie retourneert twee indexen, de eerste is de index waar dit patroon begint en de tweede is waar het eindigt, laten we een praktisch voorbeeld bekijken van het gebruik van deze functie dat we kunnen doe het perfect in onze interactieve console:

De functies waarin we schrijven Lua ze kunnen ook terugkeren meerdere resultaten, hiervoor hoeven we ze alleen op te sommen na onze terugkeer, laten we een voorbeeld bekijken waarin we een functie maken om de grootste van een lijst met elementen in een array en zijn positie erin te lokaliseren:
 functie maximale waarde (a) lokaal minimum = 1 lokaal m = a [minimum] voor i, val in ipairs (a) doen als val> m dan minimum = i; m = val end end return m, minimum end print (maximale waarde ({8,10,23,12,5}))
Zoals we kunnen zien, is onze functie vrij eenvoudig en retourneert het twee waarden, die in dit geval, volgens wat we verzenden, 23 moeten retourneren als het grootste getal en 3 als de positie, laten we eens kijken:

VERGROTEN

Naast de functionaliteit van het retourneren van meerdere resultaten, Lua u kunt ook een variabel aantal argumenten, bijvoorbeeld in de tutorials die we de functie hebben gebruikt afdrukken met één, twee en maximaal drie argumenten, dat wil zeggen, het kan een variabel aantal argumenten ontvangen, maar zoals dit doet, kunnen de functies die we ontwikkelen in Lua, Laten we eens kijken naar een voorbeeld hiervan:
 function example_function (…) local s = 0 for i, v in ipairs {…} do s = s + v end return s end print (example_function (8, 19, 30, 14, 10))
Als we waarnemers zijn in de definitie van onze functie, hebben we: drie punten (… ) tussen haakjes geeft dit aan dat onze functie een variabel aantal argumenten accepteert, en wanneer de functie wordt aangeroepen, worden alle verzonden argumenten intern verzameld en vervolgens verwerkt met de functie ipairsLaten we eens kijken naar de uitvoer van onze functie die verantwoordelijk is voor het toevoegen van alle verzonden argumenten:

VERGROTEN

Zoals we dit kenmerk van Lua Het is best handig omdat het ons in staat stelt om onze functie te definiëren zonder te weten hoeveel argumenten we eraan gaan doorgeven, we kunnen zelfs zeggen dat deze functionaliteit een beetje lijkt op wat er wordt gedaan met de voorbereide verklaringen om bewerkingen met Database af te handelen in talen als PHP of Java.
Argumenten insturen Lua het is positioneel, dat wil zeggen, wanneer we een functie aanroepen, komen deze argumenten overeen met de parameters volgens hun posities, het eerste argument komt overeen met de eerste parameter enzovoort, hoewel het soms geen kwaad zou om de argumenten bij naam te specificeren.
Deze functionaliteit is vergelijkbaar met variabele argumenten, maar bij het definiëren van de namen voor onze argumenten is het hanteren ervan veel eenvoudiger, waar we deze functionaliteit kunnen doen door alleen een tabel of rangschikking te gebruiken, iets dat erg handig is als onze functie enkele van deze parameters gebruikt laten we desgewenst de volgende aanroep bekijken van een functie die een bepaald aantal parameters ontvangt om een ​​venster te bouwen:
 create_window {x = 0, y = 0, width = 0, height = 200, title = 'Lua Window', background = "blue", borders = true}
Op deze manier is de functie create_window Je bent vrij om deze argumenten op naam te controleren als je wilt, laten we eens kijken hoe we deze argumenten in onze functie ontvangen en wat we ermee kunnen doen:
 functie create_window (opties) - vink verplichte opties aan als type (options.title) ~ = "string" dan fout ("geen titel") elseif type (options.width) ~ = "nummer" dan fout ("geen breedtemaat " ) elseif type (options.height) ~ =" number "then error (" geen hoogtemeting ") end - we passen de opties create_window toe (options.title, options.x of 0, options.y of 0, options .width, options.height, options.background of "wit", options.edges) End
Zoals we kunnen zien, zijn de mogelijkheden in onze programma's veel groter met deze functionaliteit, en hoewel dit voorbeeld illustratief is, stelt het ons in staat om te zien hoe we de genoemde argumenten binnen onze functies kunnen toepassen.
Dit is hoe we deze tutorial beëindigen, waar we hebben geleerd hoe we functies in Lua, gaande van de conventionele syntaxis die we in andere talen kunnen vinden tot de kenmerken van de taal zoals de meerdere resultaten, variabele argumenten en de mogelijkheid om de argumenten die we naar onze functies sturen een naam te geven. Op deze manier voegen we veel meer kracht toe aan onze programma's door dit soort functies op te nemen en de eenvoud te behouden waaraan Lua we zijn eraan gewend.Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave