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:
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 endAvem 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
function multiple_function (a, b) returnează a sau b endSă 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ă:
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
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
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) EndDupă 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