Funksjoner i Lua

Innholdsfortegnelse
Funksjoner er hovedmekanismen for abstraksjon av erklæringer og uttrykk i Lua, de kan utføre spesifikke oppgaver, som for det meste kalles prosedyrer eller underrutiner på andre språk.
Funksjonene er oftest skrevet med parenteser og en liste med argumenter som lar den utføre en bestemt handling, der det kan være slik at disse funksjonene ikke trenger argumenter, men parentesene må spesifiseres, la oss se et eksempel funksjoner som vi bruker som uttrykk inne Lua:

Som vi kan se, kan vi bruke funksjoner på begge måter beskrevet, men det er et spesielt tilfelle der funksjonen har et enkelt argument, og det argumentet er et streng bokstavelig eller en konstruktør for et bord eller en matrise, i dette tilfellet er parentesene valgfrie, la oss se:
 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 ({})
I følge eksemplet var vi i stand til å skrive funksjonene på begge måter, disse er like gyldige.
Et program i Lua Du kan bruke funksjoner definert både i C og på selve språket, for eksempel alle standardfunksjonene i biblioteket til Lua er skrevet inn C, som ikke er relevant for utviklere, siden påkallelse av begge ikke har noen forskjell.
Når vi vet dette, skiller definisjonen seg ikke fra andre språk, den konvensjonelle syntaksen til en funksjon styres av funksjonens navn, en liste over parametere og funksjonskroppen, som er en liste over erklæringer, la oss se et eksempel på illustrer det som forklarte:
 funksjonsoperasjon (var) lokal sum = 0 sum = var + 6 retur sum ende
Vi har allerede vår funksjon, men på den måten er den ikke veldig nyttig, siden den må påkalles ved å sende parameteren den trenger, for det kan vi legge til en linje til i koden vår for å påberope den:
 funksjonsoperasjon (var) lokal sum = 0 sum = var + 6 retur sum slutt utskrift (operasjon (57))
Hvis vi kjører vårt eksempel i terminalen vår, kan vi se hvordan programmet vårt mottar parameteren, og i henhold til operasjonene definert i funksjonen vår returnerer det en verdi:

FORSTØRRE

Noe som vi kan markere fra funksjonene i Lua, er at parameterne fungerer som lokale variabler, siden de initialiseres med verdiene de mottar i funksjonsanropet. I tillegg til dette kan vi påkalle en funksjon med et annet antall argumenter definert i funksjonen, Lua tilpasser seg dette på en måte som det gjør med flere oppgaver, et emne som vi dekket i den siste opplæringen, der de ekstra argumentene forkastes og de ekstra parametrene får verditypen null, la oss for eksempel forestille oss at vi har følgende funksjon:
 funksjon multiple_function (a, b) returner a eller b ende
La oss se hvordan vi i følgende kodedel kaller funksjonen med forskjellige parametere og på høyre side hvordan oppgaven utføres:
 f (8) a = 8, b = null f (8, 15) a = 8, b = 15 f (8, 15, 4) a = 8, b = 15 (Verdien 4 kastes)
Selv om denne oppførselen kan føre til programmeringsfeil, er den også nyttig, spesielt for standardargumenter.
En ukonvensjonell, men ganske nyttig funksjon av Lua, er muligheten til å returnere flere resultater, selv forhåndsdefinerte språkfunksjoner kan gjøre dette. Et eksempel på dette er funksjonen string.find, som ser etter et mønster av forekomst i en gitt streng, returnerer denne funksjonen to indekser, den første er indeksen hvor dette mønsteret starter og det andre er der det slutter, la oss se et praktisk eksempel på bruk av denne funksjonen som vi kan gjør det perfekt i vår interaktive konsoll:

Funksjonene vi skriver inn Lua de kan også komme tilbake flere resultater, for dette trenger vi bare å liste dem etter vår retur, la oss se et eksempel der vi lager en funksjon for å finne den største av en liste over elementer i en matrise og dens posisjon i den:
 funksjon maksimal verdi (a) lokalt minimum = 1 lokal m = a [minimum] for i, val i ipairs (a) gjør hvis val> m så minimum = i; m = val ende ende retur m, minimum ende utskrift (maks verdi ({8,10,23,12,5}))
Som vi kan se, er vår funksjon ganske enkel, og i vår retur returnerer den to verdier, som i dette tilfellet i henhold til det vi sender skal vi returnere 23 som det største tallet og 3 som posisjonen, la oss se:

FORSTØRRE

I tillegg til funksjonaliteten for å returnere flere resultater, Lua du kan også motta en variabelt antall argumenter, for eksempel gjennom opplæringen har vi brukt funksjonen skrive ut med ett, to og opptil tre argumenter, det vil si at det kan motta et variabelt antall argumenter, men som dette gjør, kan funksjonene vi utvikler i Lua, La oss se på et eksempel på dette:
 funksjon eksempel_funksjon (…) lokal s = 0 for i, v i ipairs {…} do s = s + v ende retur s sluttutskrift (eksempel_funksjon (8, 19, 30, 14, 10))
Hvis vi er observatører i definisjonen av funksjonen vår, har vi tre poeng (…) inne i parentes indikerer dette at funksjonen vår godtar et variabelt antall argumenter, og når funksjonen kalles, blir alle argumentene som sendes samlet internt og deretter behandlet med funksjonen ipairsLa oss se resultatet av funksjonen vår som har ansvaret for å legge til alle argumentene som sendes til den:

FORSTØRRE

Som vi ser denne egenskapen til Lua Det er ganske nyttig siden det lar oss definere funksjonen vår uten å ha kunnskap om hvor mange argumenter vi kommer til å sende til den, vi kan til og med si at denne funksjonaliteten er litt lik det som gjøres med utarbeidede uttalelser å håndtere operasjoner med Database på språk som PHP eller Java.
Sender argumenter inn Lua det er posisjonelt, det vil si når vi påkaller en funksjon, tilsvarer disse argumentene parametrene i henhold til deres posisjoner, det første argumentet tilsvarer den første parameteren og så videre, selv om det noen ganger ikke ville skade å spesifisere argumentene ved navn.
Denne funksjonaliteten ligner på variable argumenter, men når vi definerer navnene på argumentene våre, er håndteringen av dem mye enklere, der vi bare kan bruke denne tabellen eller arrangementet til å gjøre denne funksjonaliteten, noe som er veldig nyttig hvis funksjonen vår bruker noen av disse parameterne eventuelt, la oss se følgende kall til en funksjon som mottar en viss mengde parametere for å bygge et vindu:
 create_window {x = 0, y = 0, bredde = 0, høyde = 200, tittel = 'Lua -vindu', bakgrunn = "blå", grenser = true}
På denne måten funksjonen create_window Du står fritt til å sjekke disse argumentene ved navn hvis du ønsker det. La oss se hvordan vi mottar disse argumentene i vår funksjon og hva vi kan gjøre med det:
 funksjon create_window (alternativer) - sjekk obligatoriske alternativer hvis type (options.title) ~ = "string" deretter error ("no title") elseif type (options.width) ~ = "number" then error ("no measure of width" ) elseif type (options.height) ~ = "number" deretter feil ("ingen høydemåling") slutt - vi bruker alternativene create_window (options.title, options.x eller 0, options.y eller 0, options .width, alternativer.høyde, alternativer.bakgrunn eller "hvit", alternativer.kanter) Slutt
Som vi kan se, er mulighetene i programmene våre mye større med denne funksjonaliteten, og selv om dette eksemplet er illustrerende, lar det oss se hvordan vi kan anvende de navngitte argumentene i funksjonene våre.
Slik avslutter vi denne opplæringen, der vi lærte å håndtere funksjoner i Lua, går fra den konvensjonelle syntaksen som vi kan finne på andre språk til egenskapene til språket, for eksempel flere resultater, variable argumenter og muligheten til å navngi argumentene vi sender til funksjonene våre. På denne måten gir vi mye mer kraft til programmene våre ved å inkludere denne typen funksjoner og opprettholde enkelheten Lua vi er vant til det.Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave