Program de descărcare a limbajului de programare Lua. Lua - Instalarea Lua

Scripturi în limba Lua

Scenariul scris în Lua nu are niciunul functie speciala, de la care avea să înceapă executarea lui. Un script poate fi gândit pur și simplu ca un set de comenzi (instrucțiuni) care sunt executate începând cu prima instrucțiune.

Un script poate fi foarte simplu, constând dintr-o singură comandă, sau foarte complex, care conține zeci, sute și chiar mii de instrucțiuni. Declarațiile consecutive pot fi separate prin punct și virgulă (;). Cu toate acestea, această cerință nu este obligatorie, așa că tot codul de mai jos este corect din punct de vedere sintactic:

Lucrul cu variabile în Lua

Variabilele sunt folosite pentru a stoca valori în timpul execuției scriptului.

Nume variabile în Lua

Numele de variabile (identificatorii) în Lua pot fi orice succesiune de litere, numere și un caracter de subliniere care nu începe cu un număr.

Notă

Limba Lua este sensibilă la majuscule, așa că abc, Abc, ABC sunt nume diferite.

Tabelul de mai jos arată cuvintele care sunt rezervate de limba Lua și nu pot fi folosite în nume de variabile:

și break do elseif

final false pentru funcția dacă

în local nil nu sau

repetă return apoi adevărat până când

În plus, toate numele care încep cu un caracter de subliniere urmat de majuscule (de exemplu, _VERSION) sunt de asemenea rezervate.

Ce variabile există în Lua?

Variabilele în Lua pot fi globale sau locale. Dacă o variabilă nu este declarată în mod explicit ca locală, este considerată globală.

Variabile globale Lua

O variabilă globală apare atunci când i se atribuie prima valoare. Înainte ca prima valoare să fie atribuită, accesarea variabilei globale are ca rezultat zero.

MsgBox(tostring (g)) --> nil

MsgBox(tostring (g)) --> 1

O variabilă globală există atâta timp cât mediul de execuție al scriptului există și este disponibil pentru orice cod Lua care rulează în acel mediu.

Dacă este necesar, puteți elimina în mod explicit o variabilă globală, atribuindu-i pur și simplu valoarea nil.

g = 1 - creați o variabilă globală g cu valoarea 1

g = nil - ștergeți variabila globală g

MsgBox(tostring (g)) --> nil

Toate variabilele globale sunt câmpuri ale unui tabel obișnuit numit mediu global. Acest tabel este accesibil prin variabila globală _G. Deoarece câmpurile mediului global sunt toate variabile globale (inclusiv _G însuși), atunci _G._G == _G.

Variabile locale Lua

Orice variabile locale trebuie declarate explicit folosind cuvânt cheie local. Puteți declara o variabilă locală oriunde în script. Declarația poate include atribuirea unei valori inițiale variabilei. Dacă nu este atribuită nicio valoare, variabila conține zero.

local a - declara o variabilă locală a

local b = 1 - declarați o variabilă locală b, atribuiți-i valoarea 1

local c, d = 2, 3 - declarați variabilele locale c și d, atribuiți-le valorile 2 și 3

Sfera de aplicare a unei variabile locale începe după declarație și continuă până la sfârșitul blocului.

Notă

Domeniul de aplicare al unei variabile este zona codului de program în care puteți accesa valoarea stocată în această variabilă.

Un bloc înseamnă:

corpul structurii de control (dacă-atunci, altfel, pentru, în timp ce, repetă);

corp funcțional;

un fragment de cod inclus în cuvintele cheie do...end.

Dacă o variabilă locală este definită în afara unui bloc, domeniul ei se extinde până la sfârșitul scriptului.

local i = 1 - variabila i este locală în cadrul scriptului

in timp ce eu<= a do - цикл от 1 до 5

local a = i^2 - variabila a este locală în bucla while

MsgBox(a) --> 1, 4, 9, 16, 25

MsgBox(a) -->

dacă i > 5 atunci

local a - variabila a este locală în interiorul atunci

MsgBox(a) --> 10

MsgBox(a) --> 5 (aici acces la global a)

local a = 20 - variabila a este locală în interiorul do-end

MsgBox(a) --> 20

MsgBox(a) --> 5 (aici acces la global a)

Notă

Ori de câte ori este posibil, se recomandă utilizarea variabilelor locale în locul celor globale. Acest lucru va evita înfundarea spațiului de nume global și va furniza performanță mai bună(deoarece accesarea variabilelor locale în Lua este puțin mai rapidă decât accesarea celor globale).

Tipuri de date Lua

Ce tipuri de date acceptă Lua?

Lua acceptă următoarele tipuri de date:

1. Nil (nimic). Corespunde cu absența unei valori pentru o variabilă. Acest tip este reprezentat de o singură valoare - zero.

2. Boolean (logic). LA acest tip Valorile sunt false și adevărate.

Când se efectuează operații logice, valoarea nil este tratată ca falsă. Toate celelalte valori, inclusiv numărul 0 și șirul gol, sunt tratate ca adevărate.

3. Număr (numeric). Folosit pentru a reprezenta valori numerice.

În constantele numerice puteți specifica un opțional parte fracționatăși o ordine zecimală opțională specificată de caracterele „e” sau „E”. Constantele numerice întregi pot fi specificate în hexazecimal folosind prefixul 0x.

Exemple de constante numerice valide: 3, 3.0, 3.1415926, 314.16e-2, 0xff.

4. Snur. Folosit pentru a reprezenta șiruri.

Valorile șirurilor sunt specificate ca o secvență de caractere cuprinse între ghilimele simple sau duble:

a = „acesta este un șir”

b = „aceasta este a doua linie”

Șirurile cuprinse între ghilimele duble pot fi interpretate prin secvențe de escape asemănătoare C, care încep cu caracterul „\” (backslash):

\b (spațiu),

\n (avans de linie),

\r (retur cărucior);

\t (filă orizontală),

\\ (bară oblică inversă);

\"" (citat dublu);

\" (ghilimele unice).

Notă

Un caracter dintr-un șir poate fi reprezentat și prin propriul cod folosind o secvență de escape:

unde ddd este o succesiune de cel mult trei cifre.

Pe lângă ghilimele, pot fi folosite și paranteze pătrate duble pentru a defini un șir:

Definirea unui șir folosind paranteze pătrate duble vă permite să ignorați toate secvențele de evacuare, adică șirul este creat complet așa cum este descris:

local a = [] în Lua]=]

Va exista un termen: „definiția șirului[] în Lua”

5. Funcția. Funcțiile din Lua pot fi scrise în variabile, transmise ca parametri altor funcții și returnate ca rezultat al execuției funcției.

6. Tabel (tabel). Un tabel este o colecție de perechi cheie-valoare numite câmpuri sau elemente de tabel. Atât cheile, cât și valorile câmpului tabelului pot fi de orice tip, cu excepția zero. Tabelele nu au o dimensiune fixă: un număr arbitrar de elemente pot fi adăugate la ele în orice moment.

Citiți mai multe în articolul „Crearea de tabele în Lua”

7. Date utilizator (date utilizator). Este un tip de date special. Valorile de acest tip nu pot fi create sau modificate direct într-un script Lua.

Datele utilizator sunt folosite pentru a reprezenta noi tipuri create în programul de apelare script sau în bibliotecile scrise în C. De exemplu, bibliotecile extensii Lua pentru „CronosPRO” utilizați acest tip pentru a reprezenta obiecte precum:

bănci de date (clasa Bank);

baze de date (clasa Base);

înregistrări (clasa Record), etc.

8. Filet (curgere). Corespunde firului de executie. Aceste fluxuri nu au nicio legătură cu sistem de operareși sunt susținute exclusiv de Lua însăși.

Cum se setează tipul unei variabile în Lua?

Lua nu stabilește în mod explicit tipul unei variabile. Tipul unei variabile este stabilit atunci când variabilei i se atribuie o valoare. Orice variabilă i se poate atribui o valoare de orice tip (indiferent de tipul de valoare pe care o conținea anterior).

a = 123 - variabila a este de tip număr

a = "123" - acum variabila a este de tip șir

a = adevărat - acum variabila a este de tip boolean

a = () - acum variabila a este de tip tabel

Notă

Variabile precum tabelul, funcția, firul și datele utilizatorului nu conțin datele în sine, ci stochează referințe la obiectele corespunzătoare. La atribuirea, trecerea la o funcție ca argument și revenirea din funcție ca rezultat, obiectele nu sunt copiate, sunt copiate doar referințele la acestea.

a = () - creați un tabel. Variabila a conține o legătură către tabel

b = a - variabila b se referă la același tabel cu a

a = 10 - elementului de tabel cu indicele 1 i se atribuie valoarea 10

MsgBox(b) --> „10”

MsgBox(a) --> „20”

Datele rămase sunt valori imediate.

MsgBox(a) --> „20”

MsgBox(b) --> „10”

Cum să obțineți tipul unei variabile în Lua?

Tipul unei valori stocate într-o variabilă poate fi determinat folosind funcția de tip standard. Această funcție returnează un șir care conține numele tipului ("nil", "number", "string", "boolean", "table", "function", "thread", "userdata").

t = tip („acesta este un șir”) - t este egal cu „șir”

t = tip (123) - t este egal cu „număr”

t = tip (tip) - t este egal cu „funcție”

t = tip (adevărat) - t este egal cu „boolean”

t = tip (nul) - t este egal cu „nul”

t = tip (CroApp.GetBank()) - t este egal cu „date utilizator”

Cum se transformă tipul unei variabile în Lua?

Lua convertește automat numerele în șiruri și invers atunci când este necesar. De exemplu, dacă o valoare șir este un operand într-o operație aritmetică, este convertită într-un număr. De asemenea valoare numerica, care apare într-un loc în care este așteptat un șir, va fi convertit într-un șir.

a = "10" + 2 - a este egal cu 12

a = "10" + 2 - a este egal cu "10 + 2"

a = "-5,3e-10"*"2" - a este egal cu -1,06e-09

a = "șir" + 2 - Eroare! Nu se poate converti „șir” în număr

O valoare de orice tip poate fi convertită în mod explicit într-un șir folosind funcția standard tostring.

a = tostring(10) - a este egal cu „10”

a = tostring (adevărat) - a este egal cu „adevărat”

a = tostring (nul) - a este egal cu „nil”

a = tostring (( = „acesta este câmpul 1”)) - a este egal cu „tabel: 06DB1058”

Din exemplul anterior este clar că conținutul tabelelor nu este convertit de funcția tostring. Puteți efectua această transformare folosind funcția de randare.

a = randare(10) - a este egal cu „10”

a = randament (adevărat) - a este egal cu „adevărat”

a = randament (nul) - a este egal cu „nul”

a = randare (( = "acesta este câmpul 1")) - a este egal cu "( = "acesta este câmpul 1)"

Pentru a converti în mod explicit o valoare într-un număr, puteți utiliza funcția standard tonumber. Dacă valoarea este un șir care poate fi convertit într-un număr (sau este deja un număr), funcția returnează rezultatul conversiei, în caz contrar returnează zero.

a = tonumber ("10") - a este egal cu "10"

a = tonumber("10"....".5") - a este 10,5

a = tonumber (adevărat) - a este egal cu „nul”

a = tonumber (nul) - a este egal cu „nil”

Aranjarea comentariilor în Lua

Un comentariu în Lua începe cu două semne minus (--) și continuă până la sfârșitul rândului.

local a = 1 - comentariu pe o linie

Dacă caracterele „--” sunt urmate imediat de două paranteze pătrate de deschidere ([[), comentariul este pe mai multe linii și continuă până la două paranteze pătrate de închidere (]]).

local a = 1 - [[ multilinie

un comentariu ]]

Parantezele duble din comentarii pot fi imbricate. Pentru a nu le confunda, între paranteze se introduce un semn egal (=):

local a = [[Compania Kronos]] - [=[

local a = [[Compania Kronos]]

Numărul de caractere „=" determină imbricarea:

local a = [=[definiția unui șir [] în Lua]=] --[==[

local a = [[=[definiția unui șir [] în Lua]=]

Operațiuni utilizate în Lua

Expresiile scrise în Lua pot folosi următoarele tipuri de operații:

1. Operații aritmetice.

Lua acceptă următoarele operații aritmetice:

+ (adăugare);

- (scădere);

* (înmulțire);

/ (Divizia);

^ (exponentiație);

% (restul diviziunii).

Notă

Operațiile aritmetice se aplică atât numerelor, cât și șirurilor de caractere, care în acest caz sunt convertite în numere.

2. Operatii de comparatie.

Următoarele operațiuni de comparare a valorii sunt permise în Lua:

== (egal);

~= (nu este egal);

< (меньше);

> (mai mult);

<= (меньше или равно);

>= (mai mare sau egal cu).

Notă

Operațiile de comparare returnează întotdeauna valoarea booleană adevărată sau falsă.

Regulile pentru conversia numerelor în șiruri de caractere (și invers) nu funcționează pentru comparații, adică expresia „0” == 0 are ca rezultat fals.

3. Operații logice.

LA operatii logice raporta:

și (ȘI logic).

Operatorul și returnează primul său operand dacă este fals sau nul. În caz contrar, operația returnează al doilea operand (și acest operand poate fi de orice tip).

a = (nul și 5) - a este egal cu zero

a == (fals și 5) - a este egal cu fals

a == (4 și 5) - a este egal cu 5

sau (SAU logic).

Operația sau returnează primul operand dacă nu este nici fals, nici nul, în caz contrar returnează al doilea operand.

a == (4 sau 5) - a este egal cu 4

a == (fals sau 5) - a este egal cu 5

Notă

Operatorii logici și și sau pot returna valori de orice tip.

Operatorii logici și și sau evaluează valoarea celui de-al doilea operand numai dacă trebuie returnat. Dacă acest lucru nu este necesar, al doilea operand nu este evaluat. De exemplu:

a == (4 sau f()) - funcția f() nu va fi apelată

nu (NU logic).

Operația not returnează întotdeauna adevărat sau fals.

4. Operația de concatenare.

Pentru a concatena (uni) șiruri, utilizați operația ... (două puncte).

a = „Kronos.”-”..“Inform” - variabila a va primi valoarea „Kronos-Inform”

Notă

Dacă unul sau ambii operanzi sunt numere, ei sunt convertiți în șiruri.

a = 0..1 - variabila a va primi valoarea „01”

5. Operatie de obtinere a lungimii.

Lua definește un operator de lungime # care poate fi folosit pentru a obține lungimea unui șir.

a = "șir"

len = #a - len este egal cu 6

len = #„o altă linie” - len este egal cu 10

Notă

De asemenea, puteți utiliza operația # pentru a afla indexul (sau dimensiunea) maximă a unui tablou. Pentru mai multe detalii, consultați articolul „Lucrul cu matrice în Lua”.

Prioritatea operațiunilor în Lua

În Lua, operațiunile sunt efectuate în funcție de următoarea prioritate (în ordine descrescătoare):

2. nu # - (unar)

6. < > <= >= ~= ==

Apelarea scripturilor din formulare

Fiecare formular (inclusiv formularele imbricate) are asociat un script separat, care de obicei conține funcții care gestionează evenimente pentru formular și elementele acestuia.

Când formularul este lansat, scriptul său este încărcat în mediul global. Când apare un eveniment pe un formular sau pe un element al acestuia, sistemul apelează funcția de gestionare asociată cu acest eveniment.

Trebuie remarcat faptul că scriptul de formular, deși nu conține un apel la funcția modul, este de fapt un modul. Aceasta înseamnă că variabilele declarate în scriptul formular fără cuvântul cheie local nu sunt plasate în mediul global și sunt disponibile numai în acest script. Dacă trebuie să faceți o valoare disponibilă pentru scripturile de alte forme, aceasta trebuie să fie definită în mod explicit în tabelul global _G:

local a = _G.var

Blocuri de instrucțiuni (instrucțiuni)

Operatorii Lua de bază includ:

misiune;

operator condițional;

operatori pentru organizarea buclelor.

Un grup de instrucțiuni poate fi combinat într-un bloc (instrucțiune compusă) folosind constructul do... end.

do - începutul blocului

<оператор1>- corp bloc

<оператор2>

<операторN>

sfârşit - capăt de bloc

Un bloc deschide un nou domeniu în care pot fi definite variabilele locale.

a = 5 - variabila globala a

local a = 20 - o variabilă locală a este definită în interiorul do-end

MsgBox(a) --> 20

MsgBox(a) --> 5 (aici referința este la global a)

Operator de atribuire în Lua

O atribuire modifică valoarea unei variabile sau a unui câmp de tabel. În forma sa cea mai simplă, o sarcină ar putea arăta astfel:

a = 1 - variabilei a i se atribuie valoarea 1

a = b + c - variabilei a i se atribuie suma valorilor variabilelor b și c

a = f(x) - variabilei a i se atribuie valoarea returnată de funcția f(x)

Lua permite așa-numita atribuire multiplă, atunci când mai multe variabile din stânga operatorului de atribuire primesc valorile mai multor expresii scrise în dreapta operatorului de atribuire:

a, b = 1,5*c - a este egal cu 1; b este egal cu 5*c

Dacă există mai multe variabile decât valori, variabilelor „extra” li se atribuie zero.

a, b, c = 1, 2 - a este 1; b este egal cu 2; c este egal cu zero

Dacă există mai multe valori decât variabile, valorile „extra” sunt ignorate.

a, b = 1, 2, 3 - a este egal cu 1; b este egal cu 2; valoarea 3 nu este folosită

Atribuirea multiplă poate fi utilizată pentru a schimba valori între variabile:

a = 10; b = 20 - a este egal cu 10, b este egal cu 20

a, b = b, a - acum a este 20, b este 10

Declarație condiționată (dacă) în Lua

Declarația if testează adevărul unei anumite condiții. Dacă condiția este adevărată, porțiunea de cod care urmează cuvântului cheie then (apoi secțiunea) este executată. În caz contrar, codul care urmează cuvântului cheie else (secțiunea else) este executat.

dacă a > b atunci

returnează a - dacă a este mai mare decât b, returnează a

returnare b - altfel - returnare b

Secțiunea Else este opțională.

în cazul în care o< 0 then

a = 0 - dacă a este mai mic decât 0, setați a la 0

În loc de instrucțiuni if ​​imbricate, puteți utiliza constructul elseif. De exemplu, următorul cod:

Va fi mai ușor de înțeles dacă îl înlocuiți cu următoarele:

returnează „Ivan” - dacă a este 1

elseif a == 2 atunci

returnează „Petru” - dacă a este 2

elseif a == 3 atunci

returnați „Sergey” - dacă a este egal cu 3

returnează „Nu există un astfel de jucător” - dacă a - niciunul dintre cele de mai sus

În timp ce buclă în Lua

Operatorul while este destinat organizării buclelor cu o condiție prealabilă și are următoarea formă:

in timp ce do

... - corpul buclei

Înainte de fiecare iterație a buclei, condiția este verificată :

dacă condiția este falsă, bucla se termină și controlul este transferat la prima instrucțiune care urmează instrucțiunii while;

dacă condiția este adevărată, corpul buclei este executat, după care se repetă toate acțiunile.

în timp ce i > 0 do - ciclu de la 10 la 1

t[i] = „câmp”..i

a = (3, 5, 8, -6, 5)

în timp ce i > 0 do - căutați o valoare negativă în matrice

dacă un[i]< 0 then break end - если найдено, прерываем цикл

i = i - 1 - altfel treceți la următorul element

dacă i > 0 atunci

MsgBox ("Indexul valorii negative: "..i)

MsgBox(„Matricea nu conține valori negative”)

Notă

Buclă cu postcondiție (repetare) în Lua

Operatorul de repetare este destinat organizării buclelor cu o postcondiție și are următoarea formă:

... - corpul buclei

pana cand

Corpul buclei este executat până la condiție nu va deveni adevărat. Condiția este verificată după ce corpul buclei este executat, deci în orice caz corpul buclei va fi executat cel puțin o dată.

Însumați valorile matricei a până când suma nu depășește 10

a = (3, 2, 5, 7, 9)

suma = suma + a[i]

până la suma > 10

MsgBox(„Elementele „..i..” adăugate. Suma este „..sumă”)

Puteți utiliza instrucțiunea break pentru a ieși dintr-o buclă înainte ca aceasta să se termine.

Notă

Citiți mai multe despre caracteristicile utilizării operatorului de pauză în articolul „Operatori de întrerupere și retur”

Bucle cu declarație for în Lua

Operatorul for este conceput pentru a organiza bucle și permite două forme de scriere:

simplu (numeric pentru);

extins (universal pentru).

Forma simplă a declarației for

O formă simplă a declarației for arată astfel:

pentru var = exp1, exp2, exp3 do

... - corpul buclei

Corpul buclei este executat pentru fiecare valoare a variabilei buclei (contatorul) var in intervalul de la exp1 la exp2, cu pasul exp3.

Notă

Este posibil ca pasul să nu fie specificat. În acest caz, se ia egal cu 1.

pentru i = 1, 10 do - bucla de la 1 la 10 cu pasul 1

MsgBox ("i este egal cu "..i)

pentru i = 10, 1, -1 do - bucla de la 10 la 1 cu pasul -1

MsgBox ("i este egal cu "..i)

Notă

Expresiile exp1, exp2 și exp3 sunt evaluate o singură dată, înainte de începerea buclei. Deci, în exemplul de mai jos, funcția f(x) va fi apelată o singură dată pentru a calcula limita superioară a buclei:

pentru i = 1, f(x) do - buclă de la 1 la valoarea returnată de funcția f()

MsgBox ("i este egal cu "..i)

O variabilă buclă este locală pentru instrucțiunea buclă și este nedefinită la sfârșitul buclei.

pentru i = 1, 10 do - bucla de la 1 la valoarea returnată de funcția f().

MsgBox ("i este egal cu "..i)

MsgBox("După ieșirea din buclă, i este egal cu "..i) - Incorect! eu este egal cu zero

Notă

Valoarea unei variabile de buclă nu poate fi modificată în cadrul unei bucle, consecințele unei astfel de modificări sunt imprevizibile.

Pentru a ieși dintr-o buclă înainte de a se finaliza, utilizați instrucțiunea break.

a = (3, 5, 8, -6, 5)

pentru i = 1,#a do - căutați o valoare negativă în tablou

dacă un[i]< 0 then - если найдено...

index = i - salvează indexul valorii găsite...

rupe - și întrerupe bucla

MsgBox ("Indexul valorii negative: "..index)

Notă

Citiți mai multe despre caracteristicile utilizării operatorului de pauză în articolul „Operatori de întrerupere și retur”)

Lua are o reputație puternică ca semi-limbaj - un instrument care poate fi, ocazional, încorporat în scriptul unei aplicații scrise într-un limbaj compilat precum C++. Cu toate acestea, Lua este un limbaj complet independent, care are propriul interpret, capacitatea de a crea module, un număr mare de biblioteci și, în același timp, acest limbaj are cea mai mică dimensiune dintre analogii săi. Mai simplu spus, avem totul pentru a crea aceleași aplicații ca în perl, python și, în general, orice alt limbaj de programare obișnuit.

Vă pot oferi următoarele motive în favoarea lui Lua:

  • - aplicațiile vor fi ușor portabile între Windows și Linux (nu este un fapt că codul va funcționa fără modificări, dar portarea va fi într-adevăr nedureroasă dacă nu s-au folosit biblioteci specifice platformei)
  • - mic overhead pentru programele create
  • - de mare viteză lucru și descărcarea aplicațiilor
  • - capacitatea de a „lipi” rapid orice bibliotecă C pe aplicația ta - nu vei găsi un „clei” mai bun pentru biblioteci
  • - simpatică sintaxă a limbajului minimalist, cu capacitatea de a implementa paradigme moderne de programare pe ea
  • - Programele Lua sunt foarte ușor de implementat
  • - consum redus de memorie

Pentru a demonstra capacitățile Lua, voi arăta cum să îl folosiți pentru a crea un mic program pentru trasarea graficelor punct cu punct, cu posibilitatea de a salva graficul ca fișier imagine.

Ca set de instrumente grafice vom folosi iup - o bibliotecă multiplatformă, creată inițial cu intenția de a o folosi din Lua.

Instalarea SDK-ului Lua
Ca parte a ideii de a utiliza Lua ca limbaj independent, a fost creat un ansamblu de Lua pentru Windows, care conține biblioteci necesare pentru sarcinile de zi cu zi care apar la programarea pentru sistemul de operare specificat: lucrul cu o bază de date, GUI, XML analiza, etc. Nu vă încurcați de faptul că versiunea Lua din build este 5.1 și nu 5.2 - în cazul nostru nu este prea mare diferență între ele.

Descărcați și instalați ansamblul.

Scurtă descriere a conceptului iup
M-am gândit mult timp la cum să descriu procesul de creare a unui program fără a intra în detalii despre dispozitivul iup. Și am decis să descriu pe scurt principiile sale de bază:
  • - iup.dialog este elementul rădăcină al interfeței programului - toate elementele sunt plasate în acest container
  • - pozitionarea elementelor intr-un container se face folosind layout-uri: stabilirea regulilor de amplasare a unui element intr-un container. Iup însuși va poziționa și desena elementul conform regulilor. Principalele containere sunt cadru, dimensionator vertical, dimensionator orizontal.
  • - handlerele de evenimente sunt specificate ca funcții atașate widget-ului
  • - după crearea dialogului, începe bucla de procesare a evenimentului
Dacă ați scris anterior pentru GUI-uri folosind Tk, WxWidgets sau WinAPI, toate acestea vă vor părea familiare. Dacă nu, programul este acoperit destul de detaliat cu comentarii.
Cod program

Conectarea bibliotecilor iup require("iuplua") require("iupluacontrols") require("iuplua_pplot") -- o bibliotecă pentru lucrul cu Canvas pentru a salva un grafic într-un fișier require("cdlua") require("iupluacd") require( „șir”) -- variabile globale pentru widget-uri și setările programului -- numărul maxim de grafice plots_number = 5 -- widget-uri filă unde vor fi plasate widget-uri de introducere a datelor pentru fiecare grafic tabs = () -- containere pentru widget-uri vboxes = () - - casete de selectare pentru alegerea graficelor pentru a construi casete de selectare = () -- aici stocăm widget-uri cu textul datelor despre coordonatele punctelor = () -- widget-uri de legendă pentru fiecare grafic legende = () -- widget-uri pentru desemnarea axelor de coordonate global_legend = ( ) -- spre cea mai mare rușine, nu există nicio funcție standard în Lua split function string:split(sep) local sep, fields = sep sau ":", () local pattern = string.format("([^%s] +)", sep) self:gsub (model, function(c) fields[#fields+1] = c end) return fields end -- functia deseneaza un grafic pe plotter folosind functia de puncte specificata draw_plot(pwidget, pnum , date) x = data.value:split(", ") y = data.value:split(",") dacă checkboxes.value == "OFF" then return end if not (#x == #y) or #x == 0 then iup.Message("Ошибка", "Задано неверное число точек для графика " .. pnum) return end iup.PPlotBegin(pwidget, 0) iup.PPlotAdd(pwidget, 0, 0) for i = 1,#x do iup.PPlotAdd(pwidget, x[i], y[i]) end iup.PPlotEnd(pwidget) end -- виджет отвечающий за кнопку построения графика plot_btn = iup.button{ title = "Construi"} -- колбэк для кнопки "построить график" function plot_btn:action() -- создать виджет графопостроителя plot = iup.pplot { expand="YES", TITLE = "Linie simplă", MARGINBOTTOM="65", MARGINLEFT="65", AXS_XLABEL = global_legend.value, AXS_YLABEL = global_legend.value, LEGENDSHOW="YES", LEGENDPOS="TOPLEFT", size = "400x300" } -- этот блок для обхода бага - без него подпись к первому графику отображаться не будет iup.PPlotBegin(plot, 0) iup.PPlotAdd(plot,0,0) plot.DS_LEGEND = "" iup.PPlotEnd(plot) -- обходим виджеты с данными for i = 1, plots_number do -- чтобы свеженарисованный графи отобразился с правильной подписью print(legends[i].value) plot.DS_LEGEND = legends[i].value -- рисуем график draw_plot(plot, i, coords[i]) end -- кнопка сохранения графика в картинку на диске save_btn = iup.button{ title = "Salvați" } -- теперь создаем само окно, где будет отображаться график plot_dg = iup.dialog { iup.vbox -- это вертикальный сайзер, помести в него графопостроитель и кнопку { plot, save_btn }, } -- обработчик кнопки сохранения графика function save_btn:action() -- создаем диалог выбора имени файла ля сохранения -- в связи с ограничениями библиотеки сохранять можно только в EMF fs_dlg = iup.filedlg{DIALOGTYPE = "SAVE", FILTER = "*.emf" } iup.Popup(fs_dlg) -- если файл выбран if tonumber(fs_dlg.STATUS) >= 0 then -- дописать при необходимости нужное расширение pic = fs_dlg.value if not (string.sub(pic, string.len(pic)-3) == ".emf") then pic = pic .. ".emf" end -- создаем псевдо-холст, ассоциированный с файлом tmp_cv = cd.CreateCanvas(cd.EMF, pic .. " 400x300") -- выводим график на холст iup.PPlotPaintTo(plot, tmp_cv) -- сохраняем данные в файл cd.KillCanvas(tmp_cv) end end -- отображаем диалог с графиком plot_dg:showxy(iup.CENTER, iup.CENTER) -- запускаем петлю обработки событий для диалога if (iup.MainLoopLevel()==0) then iup.MainLoop() end end -- в цикле создаем вкладки, в которых мы будем размещать виджеты -- для сбора данных for i=1,plots_number do -- создание текстовых виджетов, куда будут вводиться координаты точек coords[i] = {} for j = 1,2 do coords[i][j] = iup.text { expand="HORIZONTAL", multiline = "YES", VISIBLELINES = 5 } end -- виджет для редактирования подписи к графику legends[i] = iup.text{ expand = "HORIZONTAL" } -- создаем контейнер вкладки и заполняем его элементами vboxes[i] = iup.vbox { iup.hbox { iup.label { title = "Semnătura graficului:" }, legends[i] }, iup.hbox { iup.label { title="X:", }, coords[i] }, iup.hbox { iup.label { title="Y:", }, coords[i] }; expand="YES", } -- меняем заголовк вкладки vboxes[i].tabtitle = "Programa" .. i -- создаем чекбокс, который будет указывать на то, нужно ли строить -- график по данным из указанной вкладки checkboxes[i] = iup.toggle{ title= "Programa" .. i, value = "PE" } end -- теперь из заполненных нами контейнеров создаем вкладки tabs = iup.tabs{unpack(vboxes)} -- создаем текстовые виджеты для редактирования подписей осей global_legend = iup.text{} global_legend = iup.text{} -- создаем фрейм для !} setari generale cadru grafic = iup.frame ( iup.vbox ( iup.label( title="Utilizați datele:", expand="HORIZONTAL" }, iup.vbox { unpack(checkboxes) }, iup.label{}, -- пустую подпись можно использовать как распорку iup.label{title = "Semnături"}, iup.hbox { iup.label{ title = "axa X"}, global_legend }, iup.hbox { iup.label{ title = "axa Y"}, global_legend }, iup.label{}, plot_btn }; expand = "VERTICAL", } -- создаем главное окно программы и наносим на него настройки и табы dg = iup.dialog { iup.hbox { frame, tabs }, title="Construirea unui program", size = "HALF" } -- показываем главное окно и запускаем обработку событий dg:showxy(iup.CENTER, iup.CENTER) if (iup.MainLoopLevel()==0) then iup.MainLoop() end !}

Câteva cuvinte despre desfășurare
Scriptul poate fi rulat folosind comanda:

Lua plotter.exe

În acest caz, bibliotecile vor fi conectate din subdirectorul clibs/, care se află în directorul în care a fost instalat Lua pentru Windows. Pentru a împacheta scriptul și bibliotecile cât mai compact posibil pentru a fi transferate pe o altă mașină, trebuie doar să copiați următoarele fișiere într-un folder (enumerate cu căile relative din directorul de instalare Lua):

Lua.exe lib/lua5.1.dll clibs/cd.dll clibs/cdlua51.dll clibs/iup.dll clibs/iup_pplot.dll clibs/iupcd.dll clibs/iupcontrols.dll clibs/iupgl.dll clibs/iuplua51.dll clibs/iuplua_pplot51.dll clibs/iupluacd51.dll clibs/iupluacontrols51.dll clibs/freetype6.dll

Nu uitați să plasați scriptul în sine cu programul în acest folder. Acum puteți transfera acest folder pe o altă mașină și puteți rula programul cu comanda indicată mai sus. În acest caz, nu sunt necesari alți pași pentru a instala biblioteci și runtime.

Din păcate, este posibil ca fișierele cd.dll, cdluad51.dll și iupcd.dll să nu funcționeze corect în această versiune de Lua pentru Windows, așa că recomand să le luați din arhiva de la linkul de mai jos.

Rezultate
Arhivați cu o versiune funcțională, pentru comoditate, lansatorul app.bat a fost adăugat.

Capturi de ecran:

Drept urmare, am primit, deși inestetic, un utilitar care avea aceeași funcționalitate ca și cum ar fi fost scris într-un limbaj de programare „serios”. În același timp, este ușor de implementat și are o greutate totală mai mică de 2 MB. Consumul de memorie este de aproximativ 7 MB. Sursă accesibil pentru editare, Lua în sine este interactiv, ceea ce simplifică dezvoltarea unui astfel de software pe site.

În opinia mea, aceasta este o alegere excelentă pentru scrierea de software educațional pentru școli și institute, precum și pentru uz intern în întreprinderi. Deoarece mașinile slabe sunt încă prezente din abundență în astfel de locuri în CSI, utilizarea Lua în acest fel este recomandabilă, mai ales în lumina sosirii treptate a Linux pe desktop-uri. În plus, tendința de a pierde codurile sursă ale software-ului scris acasă atunci când este teribil de erori poate fi echivalată cu un dezastru național.

Etichete: Adăugați etichete

Aceasta este o întrebare care apare destul de des. Ceea ce, de fapt, este destul de surprinzător, deoarece instalarea este de fapt extrem de simplă și simplă. Ai putea spune chiar că nu e nimic de făcut acolo. Dar, deoarece apar astfel de întrebări, să vorbim puțin despre instalare.

Instalarea Lua. Descarca

Primul lucru pe care va trebui să-l facem înainte de instalare este să descărcați sursele de pe site-ul său oficial: . Pentru instalare, desigur, vom avea nevoie cel mai mult ultima versiune, pe acest moment aceasta este lua 5.1.4. După descărcare, desigur, trebuie să dezarhivați sursele lua într-un folder separat.

Instalarea Lua. Compilare.

Există două opțiuni de compilare, care, în principiu, nu sunt diferite))) Prima este compilarea din Visual Studio Command Prompt:

  1. Lansați Visual Studio
  2. Executați Instrumente->Prompt de comandă Visual Studio
  3. Mergeți în folderul cu Lua, în directorul etc. Astfel: cd D:/mylibs/lua-5.1.4
  4. rulați scriptul de compilare Lua: etc/luavs.bat
  5. Avem fișierele de care avem nevoie lua.exeȘi luac.exe

A doua metodă fără a porni Visual Studio:

  1. În orice fișier-mendezh (în care lucrez personal) mergeți la folderul where_lua/etc/
  2. Edităm fișierul, punem prima linie: apelăm „path_to_visualstudio/VC/bin/vcvars32.bat”
  3. Adăugați oa doua linie: cd .. și salvați fișierul
  4. Lansăm, obținem executabilele necesare

Instalarea Lua. Acces

Pentru a putea rula Lua de oriunde, trebuie să le adăugați (calea către ele) la variabila de mediu %PATH%. Cred că tu însuți știi perfect cum să faci asta. În orice caz, nu avem nevoie de aceste fișiere, pentru că... Intenționăm să folosim Lua în cadrul programelor noastre și nu ca o aplicație separată. După aceea, consideră-te Instalare Lua finalizat, trebuie doar să înregistrați căile din anteturile .lib și lua rezultate în Visual Studio.

Instalarea Lua. Legătura statică.

Mă enervează personal că cu fiecare proiect care folosește Lua, trebuie să porți lua.dll, deoarece fără el programele nu vor funcționa. Și pentru ca ei să funcționeze, este necesar ca Lua să se conecteze cu programul nostru static. Nici acest lucru nu este greu de făcut:

  1. O facem în Visual Studio proiect nou, Win32Project, să-i spunem „LuaLib”
  2. Specificați tipul de proiect ca „Bibliotecă statică”, dezactivați utilizarea antetului precompilat, faceți clic pe Terminare
  3. Adăugați toate fișierele .h și .c la proiect, cu excepția lua.c și luac.c
  4. Pentru a împiedica compilatorul să ne dea avertismente, adăugăm;_CRT_SECURE_NO_WARNINGS la setările proiectului (Protec/Propreties/Preprocessor) (nu uitați să faceți acest lucru atât pentru versiunea de lansare, cât și pentru versiunea de depanare!!!)
  5. În setările de legătură (Project/Properties/Librarian/General/OutputFile) indicăm ce nume de bibliotecă dorim. Am specificat lua.lib pentru lansare și lua-debug.lib pentru depanare.
  6. Compilăm versiuni de depanare și lansare. Primim bibliotecile de care avem nevoie
  7. Înregistrăm căile către ele în Visual Studio

Instalarea Lua. Examinare.

Să verificăm dacă totul funcționează. Creați un proiect nou (am făcut un proiect de consolă win32). Adăugarea de incluziuni Lua:

și terminați main() în sine:

int _tmain(int argc, _TCHAR* argv ) ( lua_State * L; L = lua_open() ; //Creează o stivă luaL_openlibs(L) ; //a conecta biblioteci standard stare int = luaL_loadfile(L, "test.lua" ); //incarca fisier /* Stack state: [-1]main<--top of the stack */ if (stare) ( (void) fprintf (stderr, „fișierul nu a fost găsit \n"); întoarcere 1; ) int rezultat = lua_pcall(L, 0 , LUA_MULTRET, 0 ) ; _getch() ; returnează 0; )

Nu uitați să adăugați biblioteca noastră (lua.lib pentru lansare și lua-debug.lib pentru depanare) la setările linkerului (Project/Properties/Linker/Input/Addition Dependencies). Să compilam. Creați un fișier de testare cu un script Lua.

Această serie de lecții pe care le am în minte va discuta despre limbajul de programare Lua. Voi încerca să fac prezentarea cât mai accesibilă pentru începători și mă voi concentra asupra lor. Adică, codificatorii Lua cu experiență, cel mai probabil, nu vor învăța nimic nou de aici (sunt sigur că vor găsi loc doar pentru dispute și comentarii, care, de fapt, sunt chiar binevenite din partea lor), dar dacă nu aveți experiență vastă de programare în spatele tău, atunci cred că vei lua ceva.

Întreaga serie nu se va supune niciunui sistem. Lecțiile vor introduce secvențial o serie de constructe de limbaj, astfel încât până la a treia sau a patra lecție să vă puteți scrie deja propriile programe. Scopul meu este să te împing să înveți limba pe cont propriu, să te ajut să o simți, și nu să o explic de la A la Z - dacă vrei să stăpânești limba complet, citește ghidul de referință (care, deși slab, este tradus in rusa: http://www.lua.ru/doc/). Cu cât treci mai repede de la lecțiile „pentru manechin” de pe Internet la studiul cărții de referință, cu atât mai bine.

Dacă ceva nu este clar, asigurați-vă că puneți o întrebare în comentarii, iar eu și alți participanți vom încerca să vă ajutăm.

Lua este un limbaj de programare de uz general popular, ușor de învățat, încorporat, interpretat, tipizat dinamic. Nu, nu trebuie să înțelegeți jumătate din cuvintele spuse în propoziția anterioară - principalul lucru este să știți că este popular și necomplicat. Apropo, și-a câștigat popularitatea datorită simplității sale, precum și a dimensiunii mici a distribuției (aproximativ 150 de kiloocteți). Scripturile Lua sunt acceptate de un număr mare de aplicații, inclusiv jocuri. World of Warcraft și S.T.A.L.K.E.R. folosește limba Lua. Motorul meu de joc preferat vă va permite să creați cu ușurință o varietate de jocuri folosind Lua. După cum poți vedea, Lua îți deschide o mulțime de orizonturi!

Înainte de a începe, ar trebui să configurați un mediu de programare: adică să găsiți un program care să accepte codul Lua pe care îl scrieți și să îl executați: un interpret. Există trei opțiuni:

1. Descărcați distribuția oficială Lua de pe unul dintre site-urile care le furnizează.

De pe site-ul oficial Lua puteți descărca doar codurile sursă ale interpretului. Totuși, după ce am studiat http://lua.org/download.htmlÎn secțiunea Binare, puteți găsi link-uri către site-uri cu fișiere executabile pentru Windows. Unul din ei: . Descărcați una dintre arhive de acolo (care se potrivește cu platforma dvs.: Win32 sau Win64) și despachetați-o undeva, de preferință într-un director cu o cale scurtă: cum ar fi C:\lua. De acum înainte voi presupune că utilizați Windows și interpretul dvs. este acolo.

În acest sens, este mai ușor pentru utilizatorii sistemelor de operare bazate pe Linux: trebuie doar să folosească un manager de pachete și să instaleze Lua din depozite. Pe Debian și Ubuntu acest lucru se face cu comanda apt-get install lua, iar pe Fedora, Red Hat și distribuțiile derivate - yum install lua. Cu toate acestea, nu aveți încredere în mine orbește și consultați manualul sistemului de operare pentru a afla exact cum se face acest lucru pentru dvs.

2. Folosiți un interpret online.

Situat la http://www.lua.org/demo.html. La început poate fi suficient, dar mai târziu, când vom atinge module, vei fi obligat să folosești versiunea offline. Utilizarea interpretului online este foarte simplă: introduceți programul dvs. în caseta de text și faceți clic pe butonul Run. Programul va fi executat, iar fereastra Ieșire va afișa rezultatul programului dvs., precum și rapoartele de eroare, dacă există, pe care le-ați făcut.

3. Folosiți un IDE.

De exemplu, ZeroBrane Studio: http://studio.zerobrane.com/. Mai sunt și altele - uită-te pe Internet.

În prezent, există două versiuni ușor diferite de Lua în uz: 5.1 și 5.2. Mă voi concentra pe cea mai recentă versiune - versiunea 5.2, dar voi fi sigur să subliniez diferențe importante între aceasta și 5.1, deoarece și cea din urmă este destul de comună. Apropo, Lua 5.1 execută codul de o dată și jumătate mai rapid decât Lua 5.2, ca să știi.

=== Lecția nr. 1 ===

Deci, să începem. Creați un fișier main.lua într-un folder izolat de fișierele străine și scrieți în el:

200?"200px":""+(this.scrollHeight+5)+"px");">
-- main.lua --
print("Bună lume!")

Apoi rulați-l pe linia de comandă (nu uitați să vă mutați în directorul cu main.lua folosind comanda cd):

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

Interpretul Lua va răspunde cu:

200?"200px":""+(this.scrollHeight+5)+"px");">
Salut Lume!

În principiu, acest lucru era de așteptat. În program am numit funcția de imprimare. Funcția de imprimare preia un număr arbitrar de parametri și îi afișează secvenţial pe ecran. ÎN în acest exemplu i-am trecut șirul (lanțul de caractere) „Bună lume!”. Îl poți trece la fel de ușor ca parametru:

200?"200px":""+(this.scrollHeight+5)+"px");">
print(8) -- unele numar decimal
-- va scoate: 8

Print(0xDEADBEEF) -- număr hexazecimal
-- va scoate: 3735928559

Print("0xDEADBEEF") - dar acesta este un șir, nu un număr! Vedeți ghilimele?
-- va scoate: 0xDEADBEEF

Print(1.35e-4) -- număr în virgulă mobilă ( un număr fracționar)
-- Va scoate 0,000135. 1.35e-4 ar trebui înțeles ca „de 1,35 ori
- cu zece la minus a patra putere”, dacă cineva nu știe.

Print((198*99)-3*500 + 14/88) -- expresie
-- Tipărește valoarea expresiei: 18102.159090909. Nu este o alternativă rea
-- calculator desktop!

Print(198/7, "fertilizer", 2^9) -- câțiva parametri arbitrari
-- un fel de. Se vor afișa valorile fiecăruia dintre ele, separate prin semne
-- file:
-- 28.285714285714 ingrasamant 512
-- Vă rugăm să rețineți că ghilimele în jurul îngrășământului nu sunt afișate!

Print(1,35) -- două numere, nu fracția zecimală 1,35!
-- O virgulă este folosită pentru a separa parametrii.
-- Va scoate:
-- 1 35

Semnul „--” nu este doar o imitație a semnului liniuță, care este inserat pentru frumusețe. Semnul „--” din Lua marchează comentarii: indicii pentru programator care sunt ignorate de interpret și menite să facă codul mai ușor de înțeles. Puteți încerca să scrieți în program:

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

Interpretul va crede că acesta este un comentariu și nu va executa instrucțiunea.

Notă pentru gazdă: dacă doriți să imprimați o singură linie, puteți scrie apelul de tipărire astfel, fără paranteze:

200?"200px":""+(this.scrollHeight+5)+"px");">
imprimați „Doar un șir”

Comoditatea este cu siguranță discutabilă: rețineți că acest lucru este posibil. Cu toate acestea, astfel de apeluri sunt inacceptabile:

200?"200px":""+(this.scrollHeight+5)+"px");">
print 2 nu va funcționa, 2 nu este un șir.
tipăriți 2*2 + 6 -- oricum nu va funcționa

Str = "șir!!" -- a atribuit valoarea "șir!!" variabilei str
-- citiți mai jos despre variabile
print str -- nici nu va funcționa.

În fiecare dintre cazurile de mai sus, programul va refuza pur și simplu să funcționeze. Astfel, într-un apel „fără paranteze”, numele funcției poate fi urmat doar de un șir literal (adică o secvență de caractere cuprinse între ghilimele) și nimic altceva. Voi vorbi despre această funcție mai detaliat în viitor, dar deocamdată este suficient.

În orice limbaj bunÎn programare, se pot declara variabile: containere mici care pot conține unele date. În Lua, acest lucru se face astfel:

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

De exemplu:

200?"200px":""+(this.scrollHeight+5)+"px");">
stea = 8 -- Acum variabila stea stochează numărul 8
wars = „bufniță” -- În variabila wars - șirul „bufniță”
jedi = 42/2 -- În variabila jedi - numărul 21
luke = stea*jedi -- În variabila luke - numărul 168 (da, de 21 ori 8)

De asemenea, pot fi afișate valorile variabilelor și expresiile cu acestea:

200?"200px":""+(this.scrollHeight+5)+"px");">
print(stea, războaie, jedi, stea-jedi+luke)
-- Va scoate:
-- 8 bufniță 21 181

Doar nu încercați să adăugați variabilele star and wars - încercarea de a adăuga 8 la „bufniță” nu vă va ajuta la nimic!

După cum ar fi trebuit să observați, numele unei variabile poate fi aproape orice: principalul lucru este că nu începe cu un număr. Serios, puteți chiar să declarați o variabilă numită print, iar apoi funcția de imprimare va înceta să mai funcționeze, deoarece numele print se va referi la variabila nou declarată. Dar există un grup de cuvinte cărora li se interzice utilizarea ca nume de variabile - acestea sunt cuvinte cheie de limbă cu care nu ne-am familiarizat încă, dar care merită cu siguranță aruncate o privire:

200?"200px":""+(this.scrollHeight+5)+"px");">
și break do elseif end
false pentru funcția goto if in
local nul nu sau returnare repetă
atunci adevărat până când

Prin crearea unei variabile cu unul dintre aceste nume, veți provoca o eroare în program și cu siguranță nu va funcționa. Vă rugăm să rețineți: în Lua 5.1 nu există un cuvânt cheie goto și puteți apela o variabilă în acest fel, dar mai bine nu o faceți.
De asemenea, rețineți că numele variabilelor țin cont de majuscule și minuscule. Aceasta înseamnă că foo, fOo, fOO și FOO sunt patru variabile diferite, deci dacă ai scris numele unei variabile litere mici, iar mai târziu a scris-o cu majuscule, atunci cel mai probabil programul nu va funcționa corect.

Și acum singur punct important: ce se întâmplă dacă, accidental sau intenționat, te referi la o variabilă inexistentă? În majoritatea celorlalte limbi, acest lucru va provoca o eroare, dar în Lua această situație este acceptabilă. Este tratată ca și cum variabila inexistentă ar exista de fapt, dar valoarea ei este zero. zero- amintește-ți acest cuvânt! este un tip de valoare specială în Lua care înseamnă „nimic”. Nu zero și nu un șir gol (un șir ca „” - încercați să îl afișați pe ecran), dar pur și simplu nimic. Compară asta cu acest model: sunt două persoane, una dintre ele are un cont bancar, dar nu are bani în el, iar cealaltă nu are deloc cont bancar. În termeni Lua, se va considera că primul are $0 în cont, iar al doilea are $0 în cont. zero. Și nici măcar dolari, ci pur și simplu zero. Sper că nu te-am încurcat.

Încercați, de exemplu, să rulați acest program:

200?"200px":""+(this.scrollHeight+5)+"px");">
-- main.lua --
foo = "bar"
print(foo, baz)
-- Va scoate:
--bar nil

Astfel, variabila baz, care nu există, dar se crede că există, are valoarea nil, iar funcția de imprimare înțelege acest lucru și o tipărește pe ecran ca șirul „nil”. Lua are o metodă bună de verificare a existenței unei variabile: dacă valoarea variabilei nu este zero, atunci este cel puțin declarată. Pe de altă parte, puteți declara în mod explicit o variabilă egală cu zero:

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

Acest lucru se poate face și, deși pare stupid la prima vedere, uneori se face. În lecțiile ulterioare vei afla cine și de ce și probabil vei începe să faci același lucru. Uneori, desigur.
Fiți atenți cu nil: puteți imprima nil, dar nu puteți efectua operații aritmetice cu acesta, adică dacă puteți scăpa cu print(nil), o construcție ca 99+nil va provoca o eroare, chiar dacă ați face-o! ca 99+ nil era 99. Crede-ma, am fost si eu suparat cand am aflat.

Rezumat:
1. Am învățat despre funcția de imprimare, ce poate face și cum să o numim corect fără paranteze.
2. Am învățat cum să declarăm variabile, cum să evaluăm expresii (deși doar puțin), ce nume pot avea variabilele.
3. Am aflat despre nil, ne-am pătruns de misterul său mistic și am câștigat încrederea că în viitor vom avea multe de-a face cu el.

Pentru cei care sunt curioși și doresc să-și consolideze cunoștințele, le ofer exerciții simple, ceea ce nu trebuie să faceți dacă vă simțiți deja suficient de competent:
1. Scrie un program care imprimă refrenul cântecului tău preferat.
2. Încercați să derivați valorile următoarelor expresii. Încercați să înțelegeți de ce unele dintre ele funcționează și altele nu. Vedeți ce erori sunt cauzate de expresiile care nu funcționează.

200?"200px":""+(this.scrollHeight+5)+"px");">
2 + „șir”;
6 + "14";
„cutie” - „vox”;
1 * „11b”
„148” * „1e6”;


3. Scrie un program care schimbă două variabile cu valori. Acesta este:

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


Faceți a egal cu 8086 și b egal cu 6502. Pentru a face acest lucru, creați o a treia variabilă și faceți câteva rearanjamente simple. Asigurați-vă că problema este rezolvată corect apelând print(a,b) înainte de schimb și print(a,b) după.
Acțiune