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:
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 endWe 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
functie multiple_function (a, b) retourneer a of b endLaten 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:
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
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
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) EndZoals 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