Sadržaj
U prošlim smo vodičima vidjeli kako Lua omogućuje dinamičko rukovanje i vrijednostima i tipovima, uvijek se ističući svojom jednostavnošću i svestranošću pri izvođenju ovih operacija.Ali to nije sve Lua nudi u smislu jednostavnosti, konvencionalno podržava deklaracije koje možemo pronaći u jezicima kao u C ili PascalTamo gdje ove deklaracije podjednako uključuju dodjele i strukture upravljanja, možemo čak naići na neke nekonvencionalne načine poput višestrukih dodjela i lokalnih deklaracija.
Zadaci u Lua Izuzetno su jednostavni i rade na promjeni vrijednosti varijable u određeno vrijeme unutar našeg programa, pogledajmo jednostavan primjer pomoću interaktivne konzole Lua, koje možemo unijeti postavljanjem rezervirane riječi lua U terminalu:
Kao što vidimo imamo nekoliko jednostavnih primjera dodjeljivanja, mijenjanja vrijednosti varijabli operacijama spajanja, aritmetičkim ili jednostavno pisanjem vrijednosti. Osim ovoga, Lua dopušta višestruko dodjeljivanje, gdje je popis vrijednosti dodijeljen popisu varijabli, uvijek odvajajući ove popise zarezima za ispravan rad:
Kao što smo mogli vidjeti var1 dobio brojčanu vrijednost i var2 tekstualna vrijednost, to prema redoslijedu kojim je dodijeljen. Ako smo promatrači, vidimo kako također možemo mijenjati vrijednosti obje varijable, što nam dobro dođe kada radimo s funkcijama.
Lua čak možete prilagoditi broj vrijednosti za broj prisutnih varijabli, na primjer, ako je popis vrijednosti manji od popisa varijabli, dodatnim varijablama daje se tip vrijednosti nula prema zadanim postavkama kao njegove vrijednosti, pogledajmo primjer ovog procesa:
Kao što vidimo, prve dvije varijable primaju odgovarajuće vrijednosti, a posljednja od njih automatski prima nula kako objašnjavamo. Važno je napomenuti da višestruki dodjele nisu uvijek brži od jednostavnih, ali nam omogućuju da prikupimo više povratka iz poziva funkcije da navedemo samo neke.
Osim globalnih varijabli, Lua Podržava lokalne varijable koje, za razliku od globalnih, imaju ograničen opseg, koji ovisi o bloku u kojem su deklarirane, pogledajmo kako deklariramo lokalnu varijablu:
Kako vidimo deklaraciju ovih varijabli, radimo ih rezerviranom riječju lokalnoOve varijable rade u bloku u kojem su deklarirane, na primjer možemo reći da blok može biti kontrolna struktura ili funkcija, pogledajmo sljedeći primjer:
x = 10 lokalno i = 1 dok i <= x radi lokalno x = i * 2 ispis (x) i = i + 1 kraj ako je i> 20 tada lokalni xx = 20 ispis (x + 2) else ispis (x) kraj ispis (x)Izvršimo li isti u našem terminalu, vidjet ćemo kako rezultat možda nije ono što očekujemo, a to je zato što imamo različite blokove u kojima koristimo varijable, pogledajmo rezultat:
Iako kontrola našeg programa može biti ograničena, možemo koristiti graničnike do-end Da bismo odredili blok i znali koliko naše lokalne varijable imaju opseg, pogledajmo primjer gdje to možemo učiniti:
do local var1 = 16 local var2 = var1 + 20 x = 5 y = x + var1 end - Ovdje završava opseg var1 i var2 print (x, y) print (var1, var2)Kada ga izvršimo u našem terminalu vidjet ćemo da su varijable x i y prikazane bez problema jer su globalne, ali za var1 i var2 njihov opseg završava blokom do-end, da vidimo:
Možemo naglasiti da je uporaba lokalnih varijabli u našim programima dobra praksa, pomažu nam da ne dodirujemo globalno okruženje nepotrebnim imenima, također da je pristup tim varijablama mnogo brži nego da smo to učinili s globalnim varijablama i na kraju ovim varijable nestaju čim im opseg završi, čime se oslobađa memorijski prostor, pa preporučujemo njihovu uporabu kad god je to moguće.
Upravljačke struktureKao i ostali programski jezici, Lua pruža nam skup kontrolnih struktura koje možemo koristiti u našim programima, koristeći dobro poznate ako za rješavanje uvjeta i dok, ponoviti Y za za iterativne petlje, gdje osim ponoviti koji ima izričit terminator do a ostale koje završavaju sa kraj.
Kao i u većini programskih jezika, deklaracija ako provjerava stanje i izvršava dio zatim ili dio drugo, gdje potonji mogu biti izborni, pogledajmo skup ovih uvjeta kako se vidi u našim programima:
ako je var1 <0 tada je var1 = 0 kraj ako je var1 max linija onda pokažite () linije = 0 krajOvdje imamo tri vrste operacija, osnovnu sa zatim, pomoću return za vraćanje vrijednosti prema uvjetu i nešto potpunijem komadu koda koji poziva funkciju. Osim ovoga možemo napisati ako ugniježđeno pomoću inače, što nas spašava od upotrebe višestrukih završava, da vidimo kako to izgleda:
ako je operacija == " +" tada je rezultat = a + b elseif operacija == " -" tada rezultat = a - b elseif operacija == " *" tada je rezultat = a * b elseif operacija == "/" tada je rezultat = a / b else error ("Invalid operation") endVažno je napomenuti da to nije samo optimalnije nego je i potrebno budući da Lua nema deklaracije tipa sklopka pa će ova vrsta ugniježđenih uvjeta biti prilično česta u našim programima.
Kao i u drugim jezicima, Lua prvo procijeniti stanje dok, ako je uvjet netočan, petlja završava i u protivnom se izvršavaju sljedeći redovi koda i proces se ponavlja sve dok uvjet nije lažan, pogledajmo jednostavan primjer koji to ilustrira:
lokalni i = 1 dok var1 [i] do ispis (var1 [i]) i = i + 1 kraj
Ova izjava za razliku od dok dopušta nam da ponovimo kôd unutar uvjeta dok ne postane istinit, gdje se čak i ovaj kôd može izvršiti barem jednom budući da se evaluacija uvjeta vrši na kraju, pogledajmo primjer:
ponoviti redak = os.read () dok redak ~ = "" ispis (redak)
Glede iterativnih ciklusa za, Lua ima dvije njegove varijante, za numeričke i općenito za. Pogledajmo sintaksu numeričkog za:
za var = exp1, exp2, exp3 do krajaOva će petlja izvršiti nešto za svaku vrijednost var iz exp1 do exp2 koristeći exp3 kao vrijednost za povećanje var ili smanjenje, ako ga ne uključimo Lua prema zadanim postavkama pretpostavlja da ide jedan po jedan, pogledajmo detaljniji primjer ovih ciklusa:
za var = 1, f (x) kraj ispisa (var) kraj za var2 = 10,1, -1 do ispis (var2) krajKako vidimo da je njegova primjena vrlo jednostavna i omogućuje nam implementaciju korisnih iterativnih ciklusa u naše programe, sada pogledajmo sintaksu za općenito za:
za i, var u ipairs (niz) do ispis (var) krajOvaj ciklus koristi funkciju koju nam daje Lua poziv ipara, koji je iterator polja, gdje za svaku iteraciju i uzima indeks, dok var dobiva vrijednost povezanu s tim indeksom.
Kao što vidimo unutarnje izjave Lua Ne razlikuju se mnogo od drugih jezika, međutim jezik dodaje tu dodatnu jednostavnost koja nam omogućuje mnogo brže učenje sintakse i mnogo učinkovitiju uporabu. Ovim smo završili ovaj vodič, gdje smo naučili zadatke i kontrolne strukture unutar Lua, čime se dodaje još jedan sloj znanja kada je u pitanju ovaj jednostavan, ali moćan jezik.