Lua
| Lua | |
|---|---|
| | |
| Paradiqmalar | obyektyönümlü proqramlaşdırma |
| Yaradılma tarixi | 1993[1] |
| Fayl sonluğu |
.lua[2][3], .luna, .lunaire və ya .anair |
| Sonuncu versiyası |
|
| Təsirlənib | C++, SNOBOL, Modula-2, Scheme |
| Əməliyyat sistemi | çarpaz platformalı[d][5] |
| lua.org lua.org/portugues.html | |
Lua — yüngül, multi paradiqmalı, proqramlaşdırma dili olub qurulan sistemlərdə istifadə üçün dizayn edilmişdir. Lua, interpretatoru ANSI C dilində yazıldığı üçün kross platformdur və nisbətən sadə C APİsinə malikdir.
Lua ilkin olaraq 1993-cü ildə həmin dövrün artan proqram nizamlama tələbini qarşılamaq üçün tətbiqi proqramları genişləndirən dil kimi dizayn edilmişdi.
İdeologiya və tətbiqinə görə Lua JavaScript-ə daha yaxın olsa və prototipli OOP modelini tətbiq etsə də, Paskala-bənzər sintaksisi, daha güclü və çevik konstruksiyaları ilə fərqlənir. Luanın xarakterik xüsusiyyəti minimum sintaksis ilə çox sayda proqram obyektini tətbiq edə bilməsidir. Belə ki, bütün əsas istifadəçi məlumat növləri (massivlər, strukturlar, çoxluqlar, sıralar, siyahılar) cədvəl mexanizmi ilə, obyekt yönümlü mexanizmlər isə meta cədvəllər ilə reallaşdırılır.
Tarixi
[redaktə | vikimətni redaktə et]Dil 1993-cü ildə Braziliyada Rio-de-Janeyro Katolik Universitetində Kompüter Qrafikası Texnologiyası Qrupu (Tecgraf) üzvləri olan Robertu İerusalimşi, Luiz Enrike de Fiqueiredo və Valdemar Celes tərəfindən yaradılmışdır.
Nümunə
[redaktə | vikimətni redaktə et]Lua-nı sandboxda işə salmaq üçün:
- Modul:Sandbox-u açın və Redaktə nişanına klikləyin (Oxu və Tarixə bax arasında).
- Səhifənin sonuna enib
Debug consolebölməsinə keçin. - Boz daxil etmə qutusuna (
Cleardüyməsinin üstündə) aşağıdakını yapışdırın və Enter basın: ↲
print(_VERSION)
Nəticədə belə görməlisiniz:
Lua 5.1
Debug console-da əvvəlki Lua daxil etmələrini keçmək üçün Up oxuna ↑ basın.- Səhifənin üstünə qayıdın. Publish changes düyməsinə basmayın.
- Cancel düyməsinə klikləyin.
Modul:Sandboxdəyişməyəcək.
Alternativ olaraq:
#!/usr/bin/lua
print("Hello World!")
Dəyişən təyin etmək
[redaktə | vikimətni redaktə et]#!/usr/bin/lua
a = "Hello World!"
print(a)
Faktorial
[redaktə | vikimətni redaktə et]Faktoriyel funksiyasını və çağırışını birlikdə Debug console-a yapışdırın. Bir dəfə Enter basın.
local function factorial(nbr) -- input parameter nbr is integer local res = 1 -- init local result to 1 for idx = 2, nbr do -- for index 2 to nbr res = res * idx end return res -- returns nbr! end print(factorial(5))
Debug console-də gözlənilən nəticə:
120
- Rekursiya
--[[ ikinci parametrdə res yoxdursa, nil olur. nil or 1 həqiqətən 1-dir. ]]-- local function factorial(nbr, res) if nbr <= 1 then return res or 1 end return factorial(nbr - 1, (res or 1) * nbr) end print(factorial(5))
120
Dövr operatorları
[redaktə | vikimətni redaktə et]Luada 4 dövr operatoru var: while, repeat, for, generik for.
While
[redaktə | vikimətni redaktə et]--[[DIQQƏT: Döngəniz cavabsız qalsa, Modul:Sandbox və ya brauzeri bağlayın]]-- local idx = 1 -- Başlanğıc sayğac dəyəri --Sonsuz döngədən qaçmaq üçün condition dəyişənini false edən bəyanatlar while idx <= 5 do -- idx beş və ya daha az olduğu müddətcə döngü (sonsuz döngədən qaçmaq üçün) print(idx) -- Debug console-da cari sayğac dəyərini çıxar idx = idx + 1 -- döngünün hər iterasiyasında sayğacı artırmaq, döngünün bitməsini təmin etmək üçün end -- Döngü bitdikdə idx 6 olacaq. print("while döngüsünün xaricində, idx = " .. idx)
1 2 3 4 5 while döngüsünün xaricində, idx = 6
Repeat
[redaktə | vikimətni redaktə et]local idx = 1 -- Başlanğıc sayğac dəyəri repeat print(idx) -- Debug console-da cari sayğac dəyərini çıxar idx = idx + 1 -- döngünün hər iterasiyasında sayğacı artırmaq, döngünün bitməsini təmin etmək üçün --Sonsuz döngədən qaçmaq üçün condition dəyişənini true edən bəyanatlar until idx > 5 -- Döngü bitdikdə idx 6 olacaq. print("repeat döngüsünün xaricində, idx = " .. idx)
1 2 3 4 5 repeat döngüsünün xaricində, idx = 6
until dən sonra verilmiş şərt(condition) true olana qədər dövr davam edir.
For
[redaktə | vikimətni redaktə et]for index = 1, 5 do -- for index = from, to do print(index) end -- indeks for döngüsünün xaricində məlum deyil
1 2 3 4 5
dövr 5 dəfə icra olunur və hər dəfə 1-dən 5-ə qədər rəqəmlər ekrana verilir.
Generik for
[redaktə | vikimətni redaktə et]for key,value in pairs(_G) do print(key,value) end
string table xpcall function package table rawset function _VERSION Lua 5.1 error function pcall function os table unpack function math table ipairs function require function rawget function type function setmetatable function next function select function assert function pairs function tonumber function _G table table table rawequal function debug table mw table getmetatable function tostring function
Funksiyalar
[redaktə | vikimətni redaktə et]--[[ Redefine print function to translate English "one" ]]-- -- do bloku burada yerli (local) məkan yaradır: -- do daxilində yaradılan local dəyişənlər və funksiyalar blokdan xaricdə görünmür, -- yəni oldprint yalnız bu blok çərçivəsində əlçatan qalır və qlobal adları çirkləndirmir. do local oldprint = print -- Mövcud print funksiyasını oldprint kimi saxlayır function print(word) -- print funksiyasını yenidən təyin edir if word == "one" then -- if the input string is "one" then -- in English oldprint("bir") -- print("bir") -- standard print protected by do else -- Otherwise oldprint(word) -- print the input string end end end print("one"); print("iki, üç, dörd, beş")
bir iki, üç, dörd, beş
- Scribunto
local frame = mw.getCurrentFrame() local candidates = { {"formatnum", "12345"}, -- rəqəmləri minlik ayracı ilə formatlayır {"localurl", "Main Page"}, -- wiki səhifəsinin yerli URL-nin nisbətən yolunu qaytarır {"fullurl", "Main Page"}, -- domenlə birlikdə tam URL qaytarır {"canonicalurl", "Category:Top level"}, -- tam standart (canonical) URL qaytarır } -- _ = indeks nəzərə alınmır, pair = dəyər; ipairs sıralı saylı elementləri təkrarlayır for _, pair in ipairs(candidates) do local fn, arg = pair[1], pair[2] -- funksiya adı və arqument -- təhlükəsiz çağırış local ok, res = pcall(function() return frame:callParserFunction(fn, arg or "") end) -- sətirə çevirmə və ya səhv göstəricisi local out = ok and tostring(res) or ("<error>") -- nəticəni Lua konsolunda göstərir print(string.format('%s(%q) -> %s', fn, arg or "", out)) end
formatnum("12345") -> 12,345 localurl("Main Page") -> /wiki/Main_Page fullurl("Main Page") -> //az.wikipedia.org/wiki/Main_Page canonicalurl("Category:Top level") -> https://az.wikipedia.org/wiki/Kateqoriya:Top_level
- C dilindən Lua funsiyasının çağrılması
#include <stdio.h>
#include <stdlib.h>
#include <lua.h>
#include <lauxlib.h>
int main()
{
lua_State *L = luaL_newstate();
if (luaL_dostring(L, "function foo (x,y) return x+y end")) exit(1);
lua_getglobal(L, "foo");
lua_pushinteger(L, 5);
lua_pushinteger(L, 3);
lua_call(L, 2, 1);
printf("Result: %d\n", lua_tointeger(L, -1));
lua_close(L);
return 0;
}
yuxarıdakı nümunənin nəticəsi
$ gcc -o example example.c -llua
$ ./example
Result: 8
Kitablar
[redaktə | vikimətni redaktə et]- Figueiredo, L. H.; Celes, W.; Ierusalimschy, R., redaktorlar Lua Programming Gems. Lua.org. 2008. ISBN 978-85-903798-4-3.
- Gutschmidt, T. Game Programming with Python, Lua, and Ruby. Course Technology PTR. 2003. ISBN 1-59200-077-0.
- Ierusalimschy, R. Programming in Lua (2nd). Lua.org. 2006. ISBN 85-903798-2-5. (The 1st ed. is available online.)
- Jung, K.; Brown, A. Beginning Lua Programming. Wrox Press. 2007. ISBN 0-470-06917-1.
- Schuytema, P.; Manyen, M. Game Development with Lua. Charles River Media. 2005. ISBN 1-58450-404-8.
- Takhteyev, Yuri. Coding Places: Software Practice in a South American City. The MIT Press. 2012. ISBN 0-262-01807-1. 24 may 2017 tarixində orijinalından arxivləşdirilib. İstifadə tarixi: 5 sentyabr 2013. Chapters 6 and 7 are dedicated to Lua, while others look at software in Brazil more broadly.
- Varma, Jayant. Learn Lua for iOS Game Development. Apress. 2012. ISBN 1-4302-4662-6.
İstinadlar
[redaktə | vikimətni redaktə et]Xarici keçidlər
[redaktə | vikimətni redaktə et]- Rəsmi saytı
- lua-users.org
- Luada Proqramlar Arxivləşdirilib 2007-02-02 at the Wayback Machine
- Lua əməliyyat sistemi layihəsi Arxivləşdirilib 2013-08-16 at the Wayback Machine
