Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Sigurnost
  • Lua komandni programski jezik. Petlje s for naredbom u Lui

Lua komandni programski jezik. Petlje s for naredbom u Lui

Lua(od portugalskog "mjesec") je interpretirani programski jezik koji je razvila Tehnološka grupa računalne grafike Papinskog katoličkog sveučilišta u Rio de Janeiru u Brazilu. slobodno se distribuira, otvorenog koda izvorni tekstovi u C jeziku. Po mogućnostima i implementaciji najbliži je JavaScriptu, ali je, s moje točke gledišta, fleksibilniji i ima šire mogućnosti. Unatoč činjenici da Lua nema takve koncepte kao što su "klasa" ili "objekt", na njegovoj osnovi sasvim je moguće izgraditi OOP programe temeljene na metatablicama, koje također omogućuju implementaciju, na primjer, preopterećenja operatora.

U ovoj lekciji želim vam dati neke od najvažnijih opće informacije o ovom jeziku, au sljedećim lekcijama pokazat ću vam u praksi kako možete koristiti jezik Lua za rješavanje problema programiranja igara.

Povijest Lua

Kao što sam već rekao, Lua je razvijen na jednom od odjela Katoličkog sveučilišta u Rio de Janeiru. To se dogodilo davne 1993. godine. Ali od tog se trenutka aktivno razvijao i povremeno su izlazile nove verzije Lua - postalo je praktičnije, brže i funkcionalnije. U ovaj trenutak stabilna verzija Lua je 5.1, ali već je dostupna alfa verzija 5.2.

Lua vrste

U Lua Postoji osam glavnih tipova podataka:

  • nula (nedefinirano)
  • Boolean (boolean)
  • broj
  • niz
  • funkcija
  • korisnički podaci
  • nit
  • stol

Lua je jezik s dinamičkim tipovima podataka. Bilo koja varijabla u Lua može sadržavati vrijednosti bilo koje od gore navedenih vrsta. Sve vrijednosti u Lua mogu se pohraniti u varijablama, koristiti kao argumenti pri pozivanju funkcija i vratiti kao rezultat izvršenja funkcije.

Lua tablice

Stolovi su najviše važna vrsta podaci u Lua - tablice su osnova za pohranjivanje i korištenje prilagođene vrste podaci: strukture, nizovi, popisi, skupovi itd. implementiraju se u Luu upravo kroz tablice. Tablica u Lua je skup parova [Ključ, Vrijednost], gdje ključ može biti vrijednost bilo koje vrste osim nula.

Lua uređaj

Kao i mnogi drugi interpretirani programski jezici, implementacija Lua ima zaseban prevodilac bajtkoda od izvora do izvršnog i virtualni stroj za izvođenje generiranog bajtkoda. U slučaju Lua, bajt-kod nisu strojne upute, već naredbe " virtualni procesor Lua" s više registara, što poboljšava učinkovitost izvršenja. Lua virtualni stroj također koristi princip skupljanja smeća (slično Javi ili .NET-u), što omogućuje programeru da ne brine o dodjeljivanju/brisanju memorije - time se bavi sam interpreter.

Za kritične zadatke postoji Lua: kompajler koji vam omogućuje brži kod.

Gdje se koristi Lua?

Lua je tijekom dugogodišnjeg postojanja i razvoja osvojila srca mnogih programera softvera i danas se koristi u najrazličitijim područjima programiranja: skriptiranje računalne igrice(Kriza, Daleki plač, Diablo 3, S.T.A.L.K.E.R.), na poslužiteljima MMO igara (World of Warcraft, Allods Online), u grafičkim paketima (na primjer, u Adobeu Photoshop Lightroom), u motorima igara i dizajnerima igara (UMJESTO), za GUI programiranje nekih aplikacija (isti Photoshop Lightroom) i u mnogim drugim zadacima.

Lua dokumentacija

Općenito, na internetu ima dosta dokumentacije, kao i primjera korištenja. Stoga neću previše ulaziti u ovu temu. Mogu samo reći da vam mogu savjetovati čitanje

Uvod

Ovaj je vodič namijenjen onima s ograničenim iskustvom s LUA. Pokrit ćemo osnove formatiranja koda, sastavne blokove za stvaranje složenijeg koda i dati neke primjere. Priručnik je napisan tako da se može odmah primijeniti u praksi. Stoga biste trebali otvoriti Tabletop Simulator i svoj LUA editor da nastavite dalje.

Ovo je prvi vodič u ovoj seriji. Drugi je Learning Lua More. Treći je skup korisne funkcije pod nazivom Učenje Lua funkcija.

Prije prvog pritiska tipke

Prvo, toplo bih preporučio instaliranje Atoma ako namjeravate raditi skripte u Tabletop Simulatoru. Zna koje se funkcije mogu koristiti i uvozit će/izvoziti kod u/iz TTS-a.

Zatim biste trebali dodati u oznake. Često ćete se povezivati ​​s ovim mjestom kada počnete pisati svoje skripte. Ovdje ćete naći posebne funkcije u Tabletop Simulatoru i kako rade. Najčešće ćete koristiti API i Object stranice, po barem, u mom iskustvu.

Priprema

Kada spremite svoje skripte u Tabletop, koristit će se vaše zadnje spremanje, a zatim u njega učitajte skripte. Stoga, za bilo koju skriptu koju namjeravate napisati, morat ćete učiniti sljedeće:

  • Pripremite stol onako kako želite.
  • Spremite tablicu.
  • Napunite stol.
Za ovu vježbu, uzmite prazan stol i napravite dva objekta (koristio sam kvadratni blok i pravokutni blok), kao i crveni karo.

Više puta ga pritisnite jer naravno da hoćete.

DODATNI KREDIT: Kada stvarate tablice, postoji nekoliko načina za to. Ovdje korištena tehnika bila je osigurati vizualnu jasnoću. Međutim, stvaranje parametara gumba kao što je ovaj zauzima puno prostora ako imate puno gumba. Radije dizajniram svoje stolove na način koji štedi prostor, ali ne pretjeruje. Koristeći naš primjer, kreirao bih tablicu opcija ovako:

button_parameters = ( click_function="buttonClicked", function_owner=nula, label="Pritisni me", pozicija=(0,0.8,0), rotacija=(0,0,0), širina=500, visina=500, veličina_fonta= 100)

DODATNI KREDIT: Ovo je savršeno vrijeme za početak igre različite stvari, što možete učiniti s predmetima. Idite na stranicu Objekt u bazi znanja i isprobajte materijal. Pomičite objekte, tjerajte ih da mijenjaju položaje, mijenjaju im boje, što god mislite.

DODATNI KREDIT: Osim toga, svaki put kada se klikne gumb, click_function se pokreće s dva parametra. Prvi je referenca na objekt, točnije referenca na objekt na koji je gumb vezan. Druga je boja (na primjer, "Plava") u formatu niza boje igrača koji je pritisnuo gumb.

5) Logički iskaz

Usporedba varijabli

Opet uklonite sve skripte unutar funkcije buttonClicked(). Stvorit ćemo novu varijablu i zatim je promijeniti. Nova varijabla će biti Boolean tipa. Booleove vrijednosti mogu biti samo true, false. Booleove vrijednosti uvijek se pišu malim slovima. Prvo ćemo kreirati našu varijablu pod našim GUID-om za objekte i dame.

trueOrFalse = istina

Zatim, u buttonClicked, postavit ćemo neku logiku da provjerimo je li trueOrFalse istinit. Ako je istinito, ispisat će da je True i prebaciti ga na False. Ako se gumb ponovno pritisne, ispisat će se da je False i promijeniti vrijednost na True.

if trueOrFalse then print("trueOrFalse was true.") --trueOrFalse was true. trueOrFalse = false else print("trueOrFalse je bio false.") --trueOrFalse je bio false. trueOrFalse = pravi kraj

Mogli bismo to napisati i ovako "if trueOrFalse == true then", ali to nije potrebno. Upamtite da naredbi IF treba proslijediti Booleovu vrijednost. A budući da je trueOrFalse već jedan od njih, možemo ispustiti "== true".

Petlja je dio koda koji se može izvršiti više puta. Ovo je jedan od složenijih elemenata koje ćete koristiti u LUA. Često dolaze s tablicama, što vam omogućuje pokretanje koda za svaki zapis u tablici.

Ovo je druga vrsta - ipairs. Parovi su potrebni za tablice bez numeričkih ključeva, a iparovi su potrebni za tablice sa sekvencijalnim numeričkim ključevima (nizovi). iparovi idu redom, kada parovi mogu ići bilo kojim redoslijedom.

Lua je programski jezik koji su stvorili Roberto Ierusalimski, Valdemar Selis i Luis Henrique de Figueiredo. Teško je vjerovati da je tako popularan jezik mogao biti stvoren ne negdje u Silicijskoj dolini ili MIT-u, već u sunčanom Brazilu. U zemlji koja se čini prilično udaljenom od centara koncentracije IT-a. Međutim, u jednom od odjela Katoličkog sveučilišta u Rio de Janeiru uspjeli su stvoriti tako fleksibilan i moćan jezik da se sada široko koristi u mnogim područjima.

Sve je počelo s razvojem pomoćnog jezika za naftna tvrtka PETROBRAS. Naftni inženjeri trebali su grafički prednji kraj za obradu podataka za simulaciju određenih procesa. Štoviše, oprema je mogla biti vrlo različita - PC DOS, UNIX, Macintosh, tako da mnogi postojeći jezici (Perl, na primjer) jednostavno nisu bili prikladni, jer su radili samo na jednom od ovih sustava. U ovoj fazi razvijen je jezik nazvan DEL (jezik za unos podataka). S vremenom su mogućnosti ovog jezika postale nedostatne, pa je razvijen novi jezik, nazvan SOL (jednostavni objektni jezik). I konačno, 1993. programeri su shvatili da se mogu kombinirati u jedan potpuni programski jezik koji se zove Lua (na portugalskom Sol je sunce, a Lua je mjesec). Usput, 1996. Roberto Ierusalimsky i drugi autori jezika odlučili su ispričati svijetu o svom radu i poslali su članak o Lui u časopis “Software: Practice & Experience”. Kasnije je Lua objavljena u časopisu "Dr. Dobb's", iz kojeg je jedan od glavnih programera avanturističkih igara u LucasArtsu saznao za nju. Odlučivši koristiti Lua umjesto vlastitog skriptnog jezika, bio je zadivljen njegovom jednostavnošću i učinkovitošću. Kao rezultat toga, većina igrica koje su se razvijale u to vrijeme prepisana je u Lua, što je pridonijelo rastu njezine popularnosti.

Filozofija jezika Lua

Štoviše, ideologija Lua je slična JavaScriptu. Na primjer, oba imaju prototip modela za implementaciju OOP-a. Međutim, Lua je mnogo fleksibilniji i moćniji jezik. U Lua se koriste virtualni stroj i sakupljač smeća, što ga čini sličnijim Javi, ali to ga ne sprječava da zadrži svoju jednostavnost i eleganciju.

Jezik Lua temelji se na tablicama, implementiranim korištenjem asocijativnih nizova. Tablica ovdje znači skup podataka gdje svaki od jedinstvenih ključeva ima vlastitu vrijednost. Korištenjem tablica u Lui možete predstaviti gotovo sve podatke - obične nizove, skupove, tablice simbola itd. Funkcije se također mogu opisati u poljima tablice. Jednostavno rečeno, ako želite da se određeni lik ili objekt pojavi u vašoj omiljenoj igrici, tada samo trebate znati njegovo ime kako biste unijeli funkciju u tablicu za stvaranje tog objekta i unijeli koordinate svijeta igre u kojem bi se trebao pojaviti .

Vrijedno je spomenuti i metatablice - tablice koje vam omogućuju promjenu ponašanja drugih tablica. Na primjer, odredite je li dodavanje nenumeričkih vrijednosti prihvatljivo u nekoj situaciji. Ili definirati pokretanje “garbage collection” (čišćenje memorije) za neki događaj.

Gdje se koristi Lua?

Iako se Lua koristi iu industrijskim aplikacijama, ovaj jezik je najveću popularnost stekao u razvoju igara. Budući da razvojnim programerima može biti teško mijenjati pogon igre, a dizajneri igara stalno moraju mijenjati način rada razina ili likova, Lua ovdje može biti jednostavno nezamjenjiva. Vrlo je lako opisati interakciju između igrača, programskih NPC-ova (seljaka u Skyrimu) ili ponašanja šefova pomoću skripti, koje se zatim mogu brzo mijenjati bez utjecaja na motor.

Najpoznatija igra koja sada koristi Lua je, naravno, World of Warcraft. Na njemu je ispisano WoW sučelje (izbornik, chat itd.). Lua se također koristio u igrama kao što su Crysis, King's of Bounty, Warhammer, Allods online, CS, Stalker, The Witcher, Sim City, Far Cry, Civilization V itd.

Dodaci za nmap, wireshark, nginx ili botove za Telegram također su često napisani na Lua. Wikipedia također planira koristiti Lua za ugradnju u MediaWiki (možete ga isprobati u engleskoj verziji).

Lua se također koristi u astrofizičkim istraživačkim opservatorijima i na velikim sveučilištima diljem svijeta (kao što je Tehničko sveučilište u Berlinu). Lua je također postao nešto poput nacionalnog programskog jezika u svojoj domovini i koriste ga mnoge lokalne tvrtke i istraživački centri u većini različitim područjima aktivnosti.

Poteškoće u učenju Lua

Lua je vrlo lako naučiti. Na internetu postoji mnogo izvora i videouputa o tome. Osim toga, tu uvelike pomaže gamifikacija. Ako vam vaša omiljena igra omogućuje stvaranje modova u Lua, pokušajte eksperimentirati s svijet igre u procesu učenja. Ovo će učenje programiranja učiniti zabavnim i lakim.

Za/protiv Lua

Prednosti Lua uključuju:

  • dobra prenosivost. Ako trebate, na primjer, prenijeti program iz Windowsa u Linux, tada, uz iznimku nekih biblioteka specifičnih za platformu, kod neće trebati puno mijenjati.
  • mogućnost brzog dodavanja C knjižnice u Lua aplikaciju
  • jednostavnost implementacije programa
  • laka sintaksa
  • Lua programi troše malo memorije
  • distribuira se pod licencom MIT-a, pa se može besplatno koristiti za poslovne projekte

Od minusa:

Lua radi jednako dobro kao i skriptni jezik. Ali najčešće se koristi u kombinaciji s drugim jezicima, iako je sasvim sposoban samostalno obavljati neke zadatke. Stoga ćete morati znati barem još jedan, na primjer, C ili C++. No, bez sumnje, poznavanje Lua će vam biti veliki plus prilikom prijave za posao programera igara.

Povezane tehnologije

LuaJIt- JIT kompajler za Lua. Koristi se za zadatke u kojima je vrijeme izvršenja kritično. Radi približno šest puta brže od standardnog tumača.

Ljubav2D je popularan okvir dizajniran za razvoj 2D igara u Lua.

Corona SDK- okvir za izradu aplikacija za iOS i Android koristeći Lua. Od 2015. godine pojavila se besplatna verzija.

Ovaj niz lekcija koje imam na umu govorit će o programskom jeziku Lua. Nastojat ću prezentaciju učiniti što pristupačnijom početnicima te ću se fokusirati na njih. Odnosno, iskusni Lua koderi ovdje najvjerojatnije neće naučiti ništa novo (siguran sam da će samo naći prostora za prigovaranja i komentare, koji su, zapravo, čak i dobrodošli s njihove strane), ali ako nemate veliko programersko iskustvo iza tebe, onda mislim da ćeš nešto oduzeti.

Cijela serija neće poštivati ​​nikakav sustav. Lekcije će uzastopno uvesti niz jezičnih konstrukata, tako da do treće ili četvrte lekcije već možete pisati vlastite programe. Moj cilj je potaknuti vas na samostalno istraživanje jezik, pomoći da ga osjetite, a ne objašnjavati od A do Ž - ako želite potpuno savladati jezik, čitajte referentni vodič(koji je, iako loše, preveden na ruski: http://www.lua.ru/doc/). Što prije prijeđete s lekcija "za lutke" na internetu na proučavanje priručnika, to bolje.

Ako vam nešto nije jasno, svakako postavite pitanje u komentarima, a ja i ostali sudionici pokušat ćemo vam pomoći.

Lua je popularan, jednostavan za učenje, ugrađen, interpretiran, dinamički tipiziran programski jezik Opća namjena. Ne, ne morate razumjeti pola riječi izrečenih u prethodnoj rečenici - glavno je znati da je to popularno i nekomplicirano. Usput, svoju popularnost stekao je zbog svoje jednostavnosti, kao i male veličine distribucije (oko 150 kilobajta). Lua skripte su podržane veliki iznos aplikacije, uključujući igrice. World of Warcraft i S.T.A.L.K.E.R. koristiti jezik Lua. Moj omiljeni motor za igre omogućit će vam da jednostavno kreirate razne igre koristeći Lua. Kao što vidite, Lua vam otvara mnogo horizonata!

Prije nego što počnemo, trebali biste postaviti programsko okruženje: to jest, pronaći program koji će prihvatiti Lua kod koji napišete i izvršiti ga: tumač. Postoje tri opcije:

1. Preuzmite službenu Lua distribuciju s jednog od mjesta koja ih isporučuju.

Lua se može preuzeti samo sa službene web stranice izvorni kodovi tumač. Međutim, nakon proučavanja http://lua.org/download.html u odjeljku Binarne datoteke, možda ćete pronaći poveznice na stranice s izvršne datoteke za Windows. Jedan od njih: . Preuzmite jednu od arhiva od tamo (odgovara vašoj platformi: Win32 ili Win64) i raspakirajte je negdje, po mogućnosti u direktorij s kratkim putem: poput C:\lua. Od sada ću pretpostavljati da koristite Windows i da je vaš tumač tu.

Korisnici operativnih sustava na Temeljen na Linuxu u tom smislu je jednostavnije: samo trebaju koristiti upravitelj paketa i instalirati Lua iz repozitorija. Na Debianu i Ubuntuu to se radi naredbom apt-get install lua, a na Fedori, Red Hatu i izvedenim distribucijama - yum install lua. Međutim, nemojte mi slijepo vjerovati i pogledajte svoju referentnu knjigu. operacijski sustav kako biste saznali kako se to točno radi za vas.

2. Koristite online tumača.

Pronađeno na http://www.lua.org/demo.html. U početku će to možda biti dovoljno, ali kasnije, kada se dotaknemo modula, bit ćete prisiljeni koristiti offline verziju. Korištenje online tumača vrlo je jednostavno: unesite svoj program u tekstni okvir i kliknite gumb Pokreni. Program će se izvršiti, a izlazni prozor će prikazati izlaz vašeg programa, kao i izvješća o pogreškama, ako postoje, koja ste napravili.

3. Koristite IDE.

Na primjer ZeroBrane Studio: http://studio.zerobrane.com/. Ima i drugih - potražite na internetu.

Trenutno su u upotrebi dvije neznatno različite verzije Lua: 5.1 i 5.2. Usredotočit ću se na najviše Najnovija verzija- verzija 5.2, ali svakako ću istaknuti važne razlike između njega i 5.1, budući da je potonji također prilično čest. Usput, Lua 5.1 izvršava kod jedan i pol puta brže od Lue 5.2, samo da znate.

=== Lekcija br. 1 ===

Dakle, počnimo. Stvoriti u izolaciji od strane datoteke mapu main.lua datoteku i upišite u nju:

200?"200px":""+(this.scrollHeight+5)+"px");">
-- main.lua --
ispis(" Pozdrav svijete!")

Onda utrči naredbeni redak(ne zaboravite se pomaknuti u main.lua direktorij pomoću naredbe cd):

200?"200px":""+(this.scrollHeight+5)+"px");">
> C:\lua\lua.exe main.lua

Lua tumač će odgovoriti sa:

200?"200px":""+(this.scrollHeight+5)+"px");">
Pozdrav svijete!

U principu, to je bilo i za očekivati. U programu smo pozvali funkciju printanja. Funkcija ispisa prihvaća proizvoljan broj parametre i prikazuje ih redom na ekranu. U u ovom primjeru proslijedili smo mu niz (lanac znakova) "Hello world!". Možete ga jednostavno proslijediti kao parametar:

200?"200px":""+(this.scrollHeight+5)+"px");">
print(8) -- neki decimalni broj
-- izaći će: 8

Ispis(0xDEADBEEF) -- heksadecimalni broj
-- izaći će: 3735928559

Print("0xDEADBEEF") - ali ovo je niz, a ne broj! Vidite li navodnike?
-- će ispisati: 0xDEADBEEF

Ispis(1.35e-4) -- broj s pomičnim zarezom ( razlomački broj)
-- Izdat će 0,000135. 1.35e-4 treba shvatiti kao "1.35 puta
- za deset na minus četvrtu potenciju,” ako netko ne zna.

Ispis((198*99)-3*500 + 14/88) -- izraz
-- Ispisuje vrijednost izraza: 18102.159090909. Nije loša alternativa
-- stolni kalkulator!

Ispis(198/7, "gnojivo", 2^9) -- nekoliko proizvoljnih parametara
-- Nekako. Bit će prikazane vrijednosti svakog od njih, odvojene znakovima
-- kartice:
-- 28.285714285714 gnojivo 512
-- Imajte na umu da se citati oko gnojiva ne prikazuju!

Ispis(1,35) -- dva broja, a ne decimalni razlomak 1,35!
-- Za odvajanje parametara koristi se zarez.
-- Ispis će:
-- 1 35

Znak "--" nije samo imitacija znaka crtice, koji je umetnut radi ljepote. Znak "--" u Lua označava komentare: savjete za programere koje prevoditelj ignorira, a namijenjeni su da olakšaju razumijevanje koda. Možete pokušati napisati u programu:

200?"200px":""+(this.scrollHeight+5)+"px");">
-- print("ništa")

Tumač će misliti da je ovo komentar i neće izvršiti naredbu.

Napomena za domaćicu: ako želite ispisati samo jedan redak, poziv za ispis možete napisati ovako, bez zagrada:

200?"200px":""+(this.scrollHeight+5)+"px");">
ispis "Samo jedan niz"

Pogodnost je svakako upitna: samo imajte na umu da je to moguće. Međutim, takvi pozivi su neprihvatljivi:

200?"200px":""+(this.scrollHeight+5)+"px");">
print 2 neće raditi, 2 nije niz.
ispis 2*2 + 6 -- ionako neće raditi

Str = "string!!" -- dodijelio vrijednost "string!!" varijabli str
-- pročitajte o varijablama u nastavku
print str -- također neće raditi.

U svakom od gore navedenih slučajeva, program će jednostavno odbiti raditi. Stoga, u pozivu "bez zagrada", nakon naziva funkcije može samo slijediti string literal (to jest, niz znakova unutar navodnika), i ništa drugo. O ovoj značajci govorit ću malo detaljnije u budućnosti, ali za sada je to dovoljno.

U bilo kojem dobar jezik U programiranju je moguće deklarirati varijable: male spremnike koji mogu sadržavati neke podatke. U Lui se to radi ovako:

200?"200px":""+(this.scrollHeight+5)+"px");">
<имя_переменной> = <выражение>

Na primjer:

200?"200px":""+(this.scrollHeight+5)+"px");">
zvijezda = 8 -- Sada varijabla zvijezda pohranjuje broj 8
wars = "owl" -- U varijabli wars - niz "owl"
jedi = 42/2 -- U varijabli jedi - broj 21
luke = star*jedi -- U varijabli luke - broj 168 (da, 21 puta 8)

Također se mogu prikazati vrijednosti varijabli i izraza s njima:

200?"200px":""+(this.scrollHeight+5)+"px");">
print(zvijezda, ratovi, jedi, jedi-zvijezda+luka)
-- Ispis će:
-- 8 sova 21 181

Samo nemojte pokušavati dodati varijable zvijezde i ratovi - pokušaj dodavanja 8 "sovi" neće vam pomoći!

Kao što ste trebali primijetiti, naziv varijable može biti gotovo bilo koji: glavno je da ne počinje brojem. Ozbiljno, čak možete deklarirati varijablu koja se zove print, a tada će funkcija print prestati raditi jer će se ime print odnositi na novodeklarisanu varijablu. Ali postoji skupina riječi koje je zabranjeno koristiti kao nazive varijabli - to su jezične ključne riječi s kojima se još nismo upoznali, ali svakako ih vrijedi pogledati:

200?"200px":""+(this.scrollHeight+5)+"px");">
and break do else elseif end
false za funkciju goto if in
lokalno nula ne ili ponovi povratak
onda istina do dok

Kreiranjem varijable s jednim od ovih imena, uzrokovat ćete grešku u programu, a on sigurno neće raditi. Napomena: u Lua 5.1 ključna riječ ne postoji goto, i možete nazvati varijablu na taj način, ali bolje je da to ne radite.
Također imajte na umu da su imena varijabli osjetljiva na velika i mala slova. To znači da su foo, fOo, fOO i FOO četiri različite varijable, pa ako ste napisali naziv neke varijable mala slova, a kasnije ga je napisao velikim slovima, tada najvjerojatnije program neće raditi ispravno.

A sad sama važna točka: što se događa ako se slučajno ili namjerno pozovete na nepostojeću varijablu? U većini drugih jezika to će uzrokovati pogrešku, ali u Lua ova situacija je prihvatljiva. Tretira se kao da nepostojeća varijabla stvarno postoji, ali njena vrijednost postoji nula. nula- zapamti ovu riječ! je posebna vrsta vrijednosti u Lua koja znači "ništa". Ne nula i ne prazan niz (niz poput "" - pokušajte ga prikazati na ekranu), već jednostavno ništa. Usporedite ovo s ovim modelom: postoje dvije osobe, jedna od njih ima bankovni račun, ali nema novca na njemu, a druga uopće nema bankovni račun. U terminima Lua, smatrat će se da prvi ima 0$ na računu, a drugi ima 0$ na računu. nula. I to ne čak ni dolara, nego jednostavno nula. Nadam se da vas nisam zbunio.

Pokušajte, na primjer, pokrenuti ovaj program:

200?"200px":""+(this.scrollHeight+5)+"px");">
-- main.lua --
foo = "bar"
print(foo, baz)
-- Ispis će:
--bar nula

Dakle, varijabla baz, koja ne postoji, ali se misli da postoji, ima vrijednost nula, a print funkcija to razumije i ispisuje na ekran kao string "nil". Lua ima dobra metoda provjera postojanja varijable: ako vrijednost varijable nije nula, onda je barem deklarirana. S druge strane, možete eksplicitno deklarirati varijablu jednaku nuli:

200?"200px":""+(this.scrollHeight+5)+"px");">
cool_var = nula

To se može učiniti, a iako na prvi pogled izgleda glupo, ponekad se i učini. U narednim lekcijama naučit ćete tko i zašto i vjerojatno ćete početi raditi isto. Ponekad, naravno.
Budite oprezni s nulom: možete ispisati nulu, ali raditi stvari s njom aritmetičke operacije Zabranjeno je! Odnosno, ako se možete izvući s print(nula), konstrukcija poput 99+nula izbacit će pogrešku, čak i ako želite da 99+nula bude jednako 99. Vjerujte mi, i ja sam bio uzrujan kad sam saznao.

Sažetak:
1. Naučili smo o funkciji ispisa, što sve može i kako je ispravno pozvati bez zagrada.
2. Naučili smo kako deklarirati varijable, kako evaluirati izraze (iako samo malo), koja imena mogu imati varijable.
3. Naučili smo o ništi, proželi se njenom mističnom tajanstvenošću i stekli povjerenje da ćemo u budućnosti s njom imati puno posla.

Za one koji su znatiželjni i žele učvrstiti svoje znanje nudim jednostavne vježbe,što ne morate učiniti ako se već osjećate dovoljno kompetentnim:
1. Napišite program koji ispisuje refren vaše omiljene pjesme.
2. Pokušajte izvesti vrijednosti sljedećih izraza. Pokušajte shvatiti zašto neki od njih rade, a neki ne. Pogledajte koje pogreške uzrokuju izrazi koji ne rade.

200?"200px":""+(this.scrollHeight+5)+"px");">
2 + "string";
6 + "14";
"kutija" - "vox";
1 * "11b"
"148" * "1e6";


3. Napišite program koji razmjenjuje dva varijable s vrijednostima. To je:

200?"200px":""+(this.scrollHeight+5)+"px");">
a = 6502
b = 8086


Neka a bude jednako 8086, a b jednako 6502. Da biste to učinili, stvorite treću varijablu i napravite neke jednostavne preraspodjele. Provjerite je li problem ispravno riješen pozivom print(a,b) prije razmjene i print(a,b) nakon.

Najbolji članci na temu