LUA

Învață Lua: comenzi explicate cu exemple

66 de comenzi 25 de categorii Comunitate & Q&A

Lua este un limbaj de programare puternic, eficient, ușor și integrabil (embeddable scripting language), conceput în 1993 la universitatea PUC-Rio din Brazilia de către Roberto Ierusalimschy, Luiz Henrique de Figueiredo și Waldemar Celes. Renumit pentru amprenta sa minusculă de memorie (interpretul complet ocupă sub 300 KB) și viteza fulgerătoare de execuție, Lua a devenit standardul global de facto pentru extinderea aplicațiilor mari scrise în C și C++.

Unde este utilizat Lua în producție?
# 1. Baze de Date & Caching (Redis):
#    - Executarea de scripturi atomice tranzacționale pe server prin comanda EVAL.
#
# 2. Servere Web & API Gateways (Nginx / OpenResty / Kong):
#    - Rutare ultra-rapidă, autentificare JWT și rate limiting la nivel de microsecunde.
#
# 3. Dezvoltare de Jocuri Video:
#    - World of Warcraft (UI & Addons), Civilization, Angry Birds, LÖVE2D, Defold.
#
# 4. Instrumente de Dezvoltare & Editoare:
#    - Neovim (ecosistemul modern de configurare și plugin-uri Lua API).
#
# 5. Securitate & Rețele:
#    - Wireshark (disectoare de protocoale), Nmap (Nmap Scripting Engine - NSE).

Arhitectura și Filosofia de Design a Limbajului Lua

Filosofia de bază a Lua este furnizarea de mecanisme generice și flexibile în locul unei multitudini de concepte rigide. În loc să ofere clase, structuri, dicționare și array-uri ca tipuri separate, Lua pune la dispoziție o singură structură de date extrem de optimizată: tabela (table), combinată cu mecanismul de metatabele pentru definirea comportamentelor personalizate (cum ar fi OOP prin prototipuri sau supraîncărcarea operatorilor).

Indexare de la 1: În Lua, secvențele și array-urile sunt indexate în mod tradițional începând de la poziția 1 (nu de la 0 ca în C sau Python), reflectând notația matematică standard.

Mai jos găsești cele 12 ghiduri esențiale care acoperă fundamentele limbajului Lua 5.4, tehnicile avansate de metaprogramare, multitasking-ul prin corutine și integrările de mare performanță din producție (Redis și Neovim).

Nucleul Limbajului 4 comenzi

Gestiunea Memoriei 3 comenzi

Corutine și Multitasking 2 comenzi

Introspecție și Debugging 2 comenzi

Intrări/Ieșiri și Fișiere 4 comenzi

Matematică și Biți 4 comenzi

Metatabele și Tabele 14 comenzi

Sistem și Timp 3 comenzi

Module și Pachete 3 comenzi

Funcții și Limbaj 1 comandă

Șiruri și Text 6 comenzi

Fundamentele Limbajului 3 comenzi

Metaprogramare & OOP 2 comenzi

Fire de Execuție & Asincronism 1 comandă

Arhitectură & Module 1 comandă

Biblioteca Standard 2 comenzi

Biblioteca Standard & Sistem 1 comandă

Ecosistem & Utilizări Practice 2 comenzi

Biblioteci Standard 2 comenzi

Controlul Fluxului 1 comandă

Metaprogramare și Securitate 1 comandă

Manipulare Text 1 comandă

Depanare și Profilare 1 comandă

Operații Avansate 1 comandă

Performanță și Interoperabilitate 1 comandă

Toate funcțiile, metametodele și bibliotecile limbajului Lua

Lista completă a celor 66 de concepte esențiale, funcții built-in, metametode și module standard ale limbajului Lua (inclusiv noutățile din versiunile 5.3 și 5.4, precum și integrările cheie cu Redis, Neovim și LuaJIT). Fiecare pagină conține explicații aprofundate în limba română, sintaxă completă și exemple practice gata de execuție.

Sintaxă, Tipuri și Nucleul Limbajului (8)

Funcție / Concept Descriere
Sintaxă și Tipuri de Bază Sintaxa generală, variabile locale, atribuiri multiple și tipuri primitive
type() Verificarea și identificarea numelui tipului de date în timpul execuției
tonumber() & tostring() Conversii explicite numerice cu suport pentru baze și conversie în text
Funcții & Closures Închideri lexicale de primă clasă, funcții anonime și parametri variadici (…)
select() Manipularea listelor variadice de argumente și determinarea numărului de valori
assert() Validarea condițiilor booleene și aruncarea erorilor descriptive
warn() Sistemul nativ din Lua 5.4 de avertizări și notificări pe fluxul stderr
load() & _ENV Compilarea dinamică a codului la runtime și medii de execuție izolate

Metatabele, OOP și Metametode (12)

Funcție / Concept Descriere
Metatabele (__index, __newindex) Personalizarea comportamentului tabelelor prin indexare dinamică
OOP bazat pe Prototipuri Programare orientată pe obiecte, clase, constructori și moștenire
setmetatable() & getmetatable() Asocierea metatabelelor și protejarea acestora împotriva modificării
rawget() & rawset() Acces direct la elementele tabelelor ocolind metametodele __index și __newindex
rawequal() Comparație de identitate fizică în memorie fără invocarea metametodei __eq
__call Transformarea tabelelor în obiecte apelabile ca funcții (functors)
__tostring Personalizarea reprezentării textuale la apelul tostring() sau print()
Metametode Aritmetice Supraîncărcarea operatorilor matematici (+, -, *, /, //, %, ^, -)
Metametode pe Biți Supraîncărcarea operatorilor de manipulare binară (&, |, ~, <<, >>)
Metametode Relaționale Comparații personalizate între obiecte prin __eq, __lt și __le
__concat & __len Supraîncărcarea operatorului de concatenare (..) și a lungimii (#)
__close & Curățarea deterministică a resurselor locale la părăsirea blocului lexical

Tabele și Colecții de Date (7)

Funcție / Concept Descriere
Tabele (Liste & Dicționare) Indexare de la 1, array-uri compacte și iterare cu pairs și ipairs
table (insert, remove, sort) Manipularea colecțiilor prin inserare, ștergere, sortare și concatenare
table.pack() & table.unpack() Împachetarea și despachetarea listelor de argumente cu păstrarea dimensiunii
table.move() Copierea și translatarea ultra-rapidă a blocurilor de elemente între tabele
rawlen() Calculul lungimii brute a tabelelor și șirurilor ocolind __len
next() Traversarea primitivă pas-cu-pas a perechilor cheie-valoare din tabele
__mode (Weak Tables) Tabele cu referințe slabe pentru chei sau valori destinate cache-urilor

Șiruri de Caractere, Formatare și UTF-8 (8)

Funcție / Concept Descriere
string (find, match, gsub) Căutare de tipare, potriviri regulate și înlocuire globală
string.byte() & string.char() Conversii între caractere individuale și codurile lor ordinale ASCII/binare
string.sub(), rep() & reverse() Decuparea subșirurilor cu indici negativi, repetare și inversare
string.format() Formatare avansată în stil printf cu specificatori de aliniere și %q
string.pack() & unpack() Serializarea și despachetarea valorilor în structuri binare compacte
utf8 (Biblioteca Standard) Gestionarea fluxurilor de caractere Unicode și secvențe multi-octet
utf8.len() & utf8.offset() Numărarea caracterelor Unicode reale și poziționarea pe octeți
utf8.charpattern Șablonul standard pentru identificarea caracterelor UTF-8 individuale

Calcule Matematice și Operatori pe Biți (6)

Funcție / Concept Descriere
math (random, floor, huge) Generarea numerelor pseudo-aleatorii, rotunjiri și constante matematice
math.min() & math.max() Identificarea valorilor extreme și algoritmi de limitare (clamp)
math.abs(), sqrt(), exp(), log() Valori absolute, rădăcini pătrate, exponențiale și logaritmi
Trigonometrie (sin, cos, atan) Calcule trigonometrice în radiani și conversii cu math.rad și math.deg
math.ult() & math.type() Comparații întregi fără semn (unsigned) și verificarea subtipului integer/float
Operatori pe Biți (&, |, ~, >>, <<) Operații logice pe biți pe 64 de biți și măști binare în Lua 5.3+

Intrări/Ieșiri, Fișiere și Conducte (6)

Funcție / Concept Descriere
io.open(), read(), write() Deschiderea fișierelor text și binare, citire bufferizată și scriere
io.lines() & file:lines() Iterare eficientă linie cu linie prin fișiere masive fără supraîncărcare de RAM
file:seek(), flush(), setvbuf() Poziționare arbitrară în fișiere, forțarea scrierii și reglarea buffer-ului
io.popen() Execuția comenzilor de sistem cu capturarea intrărilor și ieșirilor prin conducte
io.tmpfile() Crearea fișierelor temporare sigure cu ștergere automată la finalizare
os.remove() & os.rename() Ștergerea și redenumirea sau mutarea fișierelor pe disc

Sistemul de Operare, Timp și Memorie (6)

Funcție / Concept Descriere
os (time, date, getenv) Timestamp-uri calendaristice, formatare de dată și variabile de mediu
os.clock() & os.difftime() Măsurarea timpului consumat de procesor (CPU) și benchmarking precis
os.exit() Terminarea procesului cu coduri de ieșire și închiderea ordonată a stării
collectgarbage() Controlul manual, forțarea pașilor și calibrarea Garbage Collector-ului
__gc (Destructori) Finalizatori apelați la colectarea obiectelor pentru eliberarea resurselor native
pcall(), xpcall() & error() Execuție protejată, capturarea erorilor și afișarea stivelor cu debug.traceback

Corutine și Multitasking Asincron (4)

Funcție / Concept Descriere
coroutine (create, resume, yield) Multitasking cooperativ, întreruperea și reluarea execuției firelor
coroutine.status() & running() Inspectarea stării curente a corutinei și obținerea firului activ
coroutine.close() Închiderea manuală a corutinelor suspendate și rularea destructorilor locali
LuaJIT FFI (C Interop) Legarea directă de biblioteci partajate C și alocarea de structuri native de memorie

Module, Pachete, Debugging și Ecosistem (9)

Funcție / Concept Descriere
require() & package.path Încărcarea modulară a fișierelor și căile de căutare a dependențelor
package.loaded & preload Caching-ul modulelor încărcate și definirea loader-elor prealabile
package.searchers Personalizarea listei de algoritmi pentru rezolvarea modulelor importate
package.cpath & loadlib() Căutarea și încărcarea dinamică a bibliotecilor native C (.so/.dll)
debug (getinfo, traceback, sethook) Introspecția apelurilor, afișarea urmelor de stivă și hook-uri de execuție
debug.getupvalue() & setupvalue() Inspectarea și modificarea valorilor capturate în închideri lexicale
debug.getlocal() & setlocal() Acces de nivel scăzut la variabilele locale din cadrul de stivă activ
Scriptare Redis (EVAL) Executarea atomica a tranzacțiilor pe serverul Redis prin redis.call()
Configurare Neovim (vim.api) Automatizarea și scrierea de plugin-uri moderne pentru editorul Neovim
Comunitate & Schimb de cunoștințe

Discuții, Întrebări & Coduri Lua

Ai o întrebare legată de Lua, cauți o soluție sau vrei să împărtășești un fragment util de cod? Trimite mai jos contribuția ta.

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.