Főnév

Lua (tsz. Luas)

  1. (informatika) Lua nyelv

A Lua egy gyors, könnyű, beágyazható szkriptnyelv, amelyet a Tecgraf (PUC-Rio, Brazília) fejlesztett ki 1993-ban. Célja az volt, hogy rugalmas konfigurációs, automatizálási és szkriptezési lehetőséget nyújtson nagyobb programokban – elsősorban beágyazott rendszerekben, játékokban és alkalmazásokban.

Lua-t gyakran használják olyan helyeken, ahol a teljesítménykritikus C/C++ kódhoz kell egy dinamikus vezérlőréteg. Kiváló példa erre a World of Warcraft vagy az Nginx webkiszolgálóhoz készült modulok.



Fő jellemzők

  • Kicsi méretű (egy bináris Lua interpreter kevesebb mint 500 KB)
  • Gyors futási idő
  • C nyelven írt, könnyen integrálható C/C++ projektekbe
  • Magas szintű, dinamikusan típusos nyelv
  • Automatikus memóriakezelés (garbage collection)
  • Elsőrendű függvények (closures)
  • Támogatja a korutinokat (lightweight threads)
  • Egyetlen adattípus-tároló – a tábla (table), amely tömbként, szótárként és objektumként is használható



Alapvető szintaxis és adattípusok

Lua-ban minden egyszerű: kis szintaktikai készlet, könnyen olvasható kód.

Változók és típusok

Lua dinamikusan típusos:

a = 5             -- szám (number)
b = "hello"       -- szöveg (string)
c = true          -- logikai érték (boolean)
d = nil           -- üres érték

Függvények

Függvények elsőrendű értékek, azaz hozzárendelhetők változókhoz, visszaadhatók, beágyazhatók.

function osszeg(a, b)
  return a + b
end

print(osszeg(3, 4))  -- 7

Függvényeket lehet névtelenként is létrehozni:

szorzo = function(x) return x * 2 end

Tábla – a Lua univerzális adatstruktúrája

A table az egyetlen beépített összetett adattípus Lua-ban. Tömbként, szótárként, objektumként is használható:

-- tömbszerű használat
t = {10, 20, 30}
print(t[1])  -- 10 (Lua-ban az indexelés 1-től indul)

-- kulcs-érték párok
t = {nev = "Dani", kor = 25}
print(t.nev)  -- Dani

-- vegyes használat
t = {1, 2, x=5, y=6}

Vezérlési szerkezetek

Elágazás

if a > 10 then
  print("nagyobb")
elseif a == 10 then
  print("pont jó")
else
  print("kisebb")
end

Ciklusok

-- while
i = 1
while i <= 5 do
  print(i)
  i = i + 1
end

-- for
for i = 1, 5 do
  print(i)
end

-- generikus for (pl. táblák bejárására)
t = {1,2,3}
for i, v in ipairs(t) do
  print(i, v)
end

Metatábla és metamódszerek

Lua lehetővé teszi a felhasználói típusok viselkedésének testreszabását metatáblák segítségével:

t = {1, 2, 3}
meta = {
  __add = function(a, b)
    return a[1] + b[1]
  end
}

setmetatable(t, meta)
print(t + t)  --> 2

Ez hasonló a C++-beli operátor túlterheléshez.



Modulok és csomagok

Lua modulokat egyszerűen fájlokban hozunk létre. Példa egy modul.lua fájlra:

local M = {}

function M.szoroz(a, b)
  return a * b
end

return M

És így lehet használni:

modul = require("modul")
print(modul.szoroz(2, 3))

Korutinok – könnyű szálkezelés

A korutinok lehetővé teszik, hogy futás közben megszakítsuk és folytassuk a kódot:

co = coroutine.create(function()
  for i = 1, 3 do
    print("korutin:", i)
    coroutine.yield()
  end
end)

coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)

Kimenet:

korutin: 1
korutin: 2
korutin: 3

Garbage Collector

Lua automatikus memóriafelszabadítást végez. A szemétgyűjtő működését részben irányítani lehet:

collectgarbage("collect")

Interfész C/C++ nyelvekkel

Lua egyik legerősebb vonása a C-vel való kétirányú interfészelhetőség.

Példa: C-ben Lua függvényhívás:

lua_getglobal(L, "osszeg");
lua_pushnumber(L, 10);
lua_pushnumber(L, 20);
lua_call(L, 2, 1);
int result = lua_tonumber(L, -1);

Ezzel lehet saját C modulokat írni Lua-hoz, és Lua-t beágyazni alkalmazásokba.



Lua alkalmazási területei

  • Játékfejlesztés: pl. Roblox, World of Warcraft addonok, Love2D
  • Beágyazott rendszerek: firmware, routerek (pl. OpenWRT), IoT
  • Webszerver: pl. Nginx + Lua module (OpenResty)
  • Adatfeldolgozás, szkriptelés: LuaTeX, Adobe Lightroom
  • Oktatás: egyszerű szintaxisa miatt alkalmas kezdőknek is



Előnyök és hátrányok

Előnyök:

  • Egyszerű, letisztult szintaxis
  • Nagyon gyors interpreter
  • Beágyazhatóság más nyelvekbe (pl. C, C++)
  • Kis memória-lábnyom
  • Könnyű tanulhatóság

Hátrányok:

  • Nincs beépített objektumorientált rendszer (de modellezhető)
  • Kisebb ökoszisztéma, mint pl. Python
  • Hibakeresés és hibaüzenetek lehetnek kevésbé beszédesek



Zárszó

A Lua egy különleges nyelv – nem általános célú, hanem egy másik program kiegészítőjeként ragyog igazán. Ha játékfejlesztéshez, konfigurációs fájlokhoz vagy könnyűsúlyú szkripteléshez keresel eszközt, Lua kiváló választás.

  • Lua - Szótár.net (en-hu)
  • Lua - Sztaki (en-hu)
  • Lua - Merriam–Webster
  • Lua - Cambridge
  • Lua - WordNet
  • Lua - Яндекс (en-ru)
  • Lua - Google (en-hu)
  • Lua - Wikidata
  • Lua - Wikipédia (angol)