Podstawowe informacje
Lua jest językiem dynamicznie typowanym, co oznacza, że nie ma potrzeby określania typu przy deklracji zmiennej. Język oczywiście posiada wbudowane typy proste takieje jak: liczba całkowita i zmienno przecinkowa oraz typ logiczny. Jednym typem złożonym jest tablica asocjacyjna (słownik), która może zostać wykorzystana do implementacji innych struktur danych oraz do emulacji obiektowści.
Lua posiada kilka zaawansowanych funkcjonalności znanych z innych języków programowanie, takich jak: funkcje pierwszej klasy, funkcje wyższego rzędu, domknięcia, odśmiecacz pamięci, rekurencja ogonowa, współprogramy. Istnieje również możliwośc rozszerzania możliwości Lua poprzez zastosowanie modyfikowanie tzw. "metatables". Pozwala to na przykład na przęciążanie operatorów. Wszystkie te właściowości czynią język wieloparadygmatowym.
Ważną informacją, szczególnie dla osób mających doświadczenie w innych języka, jest fakt, że w Lua tablice indeksowane są od jedynki, a nie od zera. Drugą ważną informacją jest to, że każda zmienna jest domyślnie globalna, aby uczynić ją lokalną należy użyć przed nazwą słowa kluczowego local
.
--komentarz zaczynają się od podwójnego minusa
day = 10 --deklaracja zmiennej globalnej
local month = "marzec" --deklaracja zmiennej lokalnej
print(day .. " " .. month .. " " .. 2020)
Funkcja print służy do wypisywania w oknie konsoli tekstu. Widoczne dwie kropki to operator konkatenacji. Alternatywnie można było użyć przecinków, wtedy wszytkie argumenty po wypisaniu byłyby oddzielone tabulatorami. Po uruchomieniu powyższego skryptu zostanie wypisany ciąg 10 marzec 2020
.
Sterowanie przepływem
Instrukcje warunkowe
Lua nie posiada intrukcji typu switch-case
, do dyspozycji mamy tylko instrukcje if-elseif-else
.
if op == "+" then
r = a + b
elseif op == "-" then
r = a - b
elseif op == "*" then
r = a*b
elseif op == "/" then
r = a/b
else
error("invalid operation")
end
Pętle
Do dyspozcyji mamy pętle typu: while, repeate-until, for
.
while condition do
--operacje
end
repeat
--operacje
until condition
--delta - dodawan do wartość początkowej
-- w każdym obiegu pętli, może być ujemna
for i = first, last, delta do
--operacje
end
Funkcje
Funkcje definiowane są za pomocą słowa kluczowego function
. W Lua mamy do czynienia z funkcjami pierwszej klasy, więc można je przypisywać do zmiennych lub przekazywać do innych funkcji jako argument.
function add_one(num)
return num + 1
end
local number = 10
new_add_one = add_one
print(new_add_one(number))
Tablice
Jedyną wbudowaną strukturą danych w Lua jest tablica asocjacyjna. Warto zauważyć, że jeżeli utworzym tablice pojedynczych elementów (a nie par klucz wartośc), zostanie automatycznie dodany indeks do każdego elementu.
Tablice deklaruje się wnastępujący sposób:
a_table = {} --tworzy pustą tablice
b_table = {x = 10} --tworzy nową tablicę z jednym elementem x, do którego przypisana jest wartość 10
print(b_table["x"]) --wypisuje wartość przypisaną do klucza - 10
c_table = b_table --taki przypisanie powoduje utworzenie referencji c_table to b_table
c_table["x"] = 20 --zmiana wartości na 20
print(c_table["x"]) --zostanie wypisane 20
print(b_table["x"]) --równierz zostanie wypisane 20
Tablice posiadają specjalną składnie, która umożliwia korzystanie z nich jak z obiektów w innych językach:
point = { x = 10, y = 20 }
print(point["x"]) --wypisze 10
print(point.x) --równierz wypisze 10 - wyrażenie jest równoważne z powyższym