Funcții în Lua

Cuprins
Funcțiile sunt principalul mecanism de abstractizare a declarațiilor și expresiilor din Lua, pot îndeplini sarcini specifice, care sunt în mare parte denumite proceduri sau subrutine în alte limbi.
Funcțiile de cele mai multe ori sunt scrise cu paranteze și o listă de argumente care îi vor permite să efectueze o acțiune specifică, unde poate fi cazul în care aceste funcții nu au nevoie de argumente, cu toate acestea parantezele trebuie specificate, să vedem un exemplu de funcții pe care le folosim ca expresii în interior Lua:

După cum putem vedea, am putea folosi funcțiile în ambele moduri descrise, dar există un caz special în care funcția are un singur argument și acel argument este un șir literal sau un constructor pentru o masă sau o matrice, în acest caz parantezele sunt opționale, să vedem:
 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 ({})
Conform exemplului am reușit să scriem funcțiile în ambele moduri, acestea fiind la fel de valabile.
Un program în Lua Puteți utiliza funcții definite atât în ​​C, cât și în limbajul propriu-zis, de exemplu, toate funcțiile standard din biblioteca Lua sunt scrise în C, care nu este relevant pentru dezvoltatori, deoarece invocarea ambelor nu are nicio diferență.
Știind acest lucru, definiția nu diferă de alte limbi, sintaxa convențională a unei funcții este guvernată de numele funcției, de o listă de parametri și de corpul funcției, care este o listă de declarații, să vedem un exemplu pentru ilustrează ce a explicat:
 funcționare funcție (var) sumă locală = 0 sumă = var + 6 return sum end
Avem deja funcția noastră, totuși în acest fel nu este foarte utilă, deoarece trebuie invocată prin trimiterea parametrului de care are nevoie, pentru aceasta putem adăuga încă o linie la codul nostru pentru a-l invoca:
 funcție operație (var) sumă locală = 0 sumă = var + 6 returnare finală imprimare sumă (operație (57))
Dacă rulăm exemplul nostru în terminalul nostru, putem vedea cum programul nostru primește parametrul și în funcție de operațiunile definite în cadrul funcției noastre, returnează o valoare:

MARI

Ceva pe care îl putem evidenția din funcțiile din Lua, este că parametrii funcționează ca variabile locale, deoarece sunt inițializați cu valorile pe care le primesc în apelul de funcție. În afară de aceasta, putem invoca o funcție cu un număr diferit de argumente definite în funcție, Lua se adaptează la acest lucru într-un mod care se întâmplă cu atribuirea multiplă, un subiect pe care l-am tratat în ultimul tutorial, unde argumentele suplimentare sunt eliminate și parametrii suplimentari obțin tipul de valoare zero, de exemplu, să ne imaginăm că avem următoarea funcție:
 function multiple_function (a, b) returnează a sau b end
Să vedem cum în următoarea porțiune de cod numim funcția cu parametri diferiți și în partea dreaptă cum se efectuează atribuirea:
 f (8) a = 8, b = zero f (8, 15) a = 8, b = 15 f (8, 15, 4) a = 8, b = 15 (Valoarea 4 este aruncată)
Deși acest comportament poate duce la erori de programare, este util și în special pentru argumentele implicite.
O caracteristică neconvențională, dar destul de utilă a Lua, este capacitatea de a returna rezultate multiple, chiar și funcțiile de limbă predefinite pot face acest lucru. Un exemplu în acest sens este funcția șir.găsiți, care caută un model de apariție într-un șir dat, această funcție returnează doi indici, primul este indicele de unde începe acest model și al doilea este unde se termină, să vedem un exemplu practic de utilizare a acestei funcții pe care o putem faceți perfect în consola noastră interactivă:

Funcțiile în care scriem Lua se pot întoarce și ei rezultate multiple, pentru aceasta trebuie doar să le listăm după întoarcere, să vedem un exemplu în care creăm o funcție pentru a localiza cea mai mare dintr-o listă de elemente dintr-o matrice și poziția acesteia în ea:
 function maximum value (a) local minimum = 1 local m = a [minimum] for i, val in ipairs (a) do if val> m then minimum = i; m = retur sfârșit val m, imprimare finală minimă (valoare maximă ({8,10,23,12,5}))
După cum putem vedea, funcția noastră este destul de simplă și în returnarea noastră returnează două valori, care, în acest caz, în funcție de ceea ce trimitem, ar trebui să returnăm 23 ca număr cel mai mare și 3 ca poziție, să vedem:

MARI

În plus față de funcționalitatea de returnare a mai multor rezultate, Lua puteți primi și un număr variabil de argumente, de exemplu, pe parcursul tutorialelor am folosit funcția imprimare cu unul, doi și până la trei argumente, adică poate primi un număr variabil de argumente, dar așa cum se întâmplă, la fel pot funcțiile pe care le dezvoltăm în Lua, Să vedem un exemplu în acest sens:
 funcție exemplu_funcție (…) local s = 0 pentru i, v în ipairs {…} do s = s + v sfârșit return s final print (exemplu_funcție (8, 19, 30, 14, 10))
Dacă suntem observatori în definiția funcției noastre, avem trei puncte (…) în paranteze, acest lucru indică faptul că funcția noastră acceptă un număr variabil de argumente, iar când funcția este numită, toate argumentele trimise sunt colectate intern și apoi procesate cu funcția ipairsSă vedem rezultatul funcției noastre, care este însărcinat cu adăugarea tuturor argumentelor care i-au fost trimise:

MARI

După cum vedem această caracteristică a Lua Este destul de util, deoarece ne permite să ne definim funcția fără a avea cunoștință de câte argumente îi vom transmite, putem chiar spune că această funcționalitate este un pic similară cu ceea ce se face cu declarații pregătite pentru a gestiona operațiuni cu baza de date în limbi precum PHP sau Java.
Trimiterea de argumente în Lua este pozițional, adică atunci când invocăm o funcție, aceste argumente corespund parametrilor în funcție de pozițiile lor, primul argument corespunde primului parametru și așa mai departe, deși uneori nu ar strica să specificăm argumentele pe nume.
Această funcționalitate este similară cu argumentele variabile, totuși atunci când definim numele argumentelor noastre, gestionarea lor este mult mai simplă, unde doar prin utilizarea unui tabel sau a unui aranjament putem face această funcționalitate, lucru care este foarte util dacă funcția noastră folosește unii dintre acești parametri opțional, să vedem următorul apel către o funcție care primește o anumită cantitate de parametri pentru a construi o fereastră:
 create_window {x = 0, y = 0, width = 0, height = 200, title = 'Lua Window', background = "blue", border = true}
În acest fel funcția create_window Sunteți liber să verificați aceste argumente după nume, dacă doriți, să vedem cum primim aceste argumente în funcția noastră și ce putem face cu ea:
 funcție create_window (opțiuni) - verificați opțiunile obligatorii dacă tipul (options.title) ~ = "șir", apoi eroare ("fără titlu") altfel dacă tip (options.width) ~ = "număr", apoi eroare ("fără măsură de lățime" ) elseif type (options.height) ~ = "number" apoi eroare ("fără măsurare înălțime") end - aplicăm opțiunile create_window (options.title, options.x sau 0, options.y sau 0, options .width, options.height, options.background sau "white", options.edges) End
După cum putem vedea, posibilitățile din programele noastre sunt mult mai mari cu această funcționalitate și, deși acest exemplu este ilustrativ, ne permite să vedem cum putem aplica argumentele numite în cadrul funcțiilor noastre.
Așa încheiem acest tutorial, unde am învățat cum să gestionăm funcțiile Lua, trecând de la sintaxa convențională pe care o putem găsi în alte limbi la caracteristicile limbajului, cum ar fi rezultatele multiple, argumentele variabile și posibilitatea de a denumi argumentele pe care le trimitem funcțiilor noastre. În acest fel, adăugând mult mai multă putere programelor noastre prin includerea acestor tipuri de caracteristici și menținerea simplității la care Lua suntem obișnuiți cu asta.V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv
wave wave wave wave wave