Skocz do zawartości

[Tut] Kurs Lua Cz. #1


ildefons

Rekomendowane odpowiedzi

Jako iż większość osób nie zna angielskiego tak dobrze, żeby przeczytać i zrozumieć (co jest najważniejsze) dokumentację języka LUA postanowiłem napisać ten właśnie poradnik. Ma on na celu pomóc początkującym zapoznać się chociaż trochę z tym językiem.

Zaczynamy

Zapewne otwierając ten temat pomyślałeś sobie: pewnie kolejny pseudo poradnik, który tak naprawdę nikogo nie nauczy. Postaram się, żeby tak nie było. Na początku warto byłoby zaopatrzyć się w edytor tekstu. Może być zarówno systemowy Notatnik (chociaż są problemy z odczytywaniem wielu linii, więc odradzam) lub zaawansowany, z kolorowaniem składni Notepad++. I od tego zaczniemy - od zainstalowania tego edytora.

Wchodzimy na tą stronę, z której pobieramy nasz ulepszony edytor. Robimy to przez kliknięcie przycisku Pobierz program. Po chwili otworzy się okno pobierania. W instalacji nie ma niczego szczególnego, więc robimy to tak jak chcemy. Są dwa typy ustawiania kolorowania składni języka LUA: otworzenie pliku LUA lub wybranie tego z menu Języki (w angielskiej wersji językowej Languages).

kurslua11.png

Najlepszym rozwiązaniem byłoby teraz ustawienie uruchamiania od razu plików w edytorze Notepad++. Robimy to przez kliknięcie prawym klawiszem myszy na dowolny plik z rozszerzeniem *.lua, następnie z listy wybieramy Otwórz za pomocą.... Jeżeli pojawi się jeszcze jedna lista wybieramy z niej Wybierz program domyślny....

kurslua12.png

Następnie w nowym oknie w klikamy przycisk Przeglądaj i kierujemy do naszego edytora.

kurslua13.png

Po czym klikamy przycisk OK. To samo robimy w plikamy XML. Od tej pory każdy plik LUA oraz XML powinien otworzyć się w programie Notepad++ z ustawionym już kolorowaniem składni dla tego języka. Gdy już wszystko mamy ustawione możemy przejść do programowania.

Język LUA

Lua - co to w ogóle jest? Jest to język programowania używany w wielu aplikacjach, nie tylko serwerach OT. Jest on dynamiczny i to jest jego zaletą - żeby coś zmodfikować nie musimy kompilować całej aplikacji od nowa, wystarczy zmienić kilka rzeczy w pliku, zapisać i zrestartować dany program, po czym modyfikacja zostaje od razu wzdrążona. Dzieje się tak ponieważ Lua jest językiem parsowanym. Co to znaczy? Że wszystko jest sprawdzane przy ładowaniu aplikacji. Następnie gdy chcemy coś wywołać aplikacja odwołuje się do załadowanego już pliku. Ale nie my się o to mamy martwić i nie to jest celem tego poradnika. Dodam, że dużo łatwiej będzie uczyć się Lua komuś, kto już zna inne języki, chociażby PHP. Po tym wstępie możemy zacząć właściwą część - programowanie.

Programowanie

Od razu wyjaśniam - ta część kursu jest tylko o języku Lua. O skryptach w serwerach OT postaram się napisać kolejny poradnik, który pokaże Wam jak używać języka Lua w swoich serwerach. Teraz powiem coś o zmiennych, które są bardzo ważną częścią każdego języka. Oto ich definicja:

Jednak Lua różni się od innych języków - zmienne mogą mieć różne wartości i nie musimy określać typów. To znaczy, że najpierw zmienna może być liczbą, potem ta sama zmienna może przekształcić się w tablicę, następnie ciąg znaków, a potem wartość logiczną, czyli prawdę albo fałsz. W większości przypadków ułatwia to programowanie. Dodatkowo w Lua nie ma zmiennych stałych. Jednak przyjęło się, że zmienne, których wartości lepiej nie ruszać są deklarowane jako zmienne globalne i są złożone z dużych liter. Teraz trochę praktyki. Jak zdeklarować, czyli utworzyć zmienną? Tak:

local nazwa_zmiennej = "wartość"

Nazwa zmiennej może być dowolna, byleby nie korygowała z nazwami funkcji oraz innych zmiennych, a także musi zaczynać się literą, bez względu na wielkość. W jej nazwie nie mogą pojawić się polskie znaki, jak i w wielu innych rzeczach. Polskie znaki możemy zastosować tylko w ciągach znaków. Wartość możemy wpisać dowolną. Gdybyśmy chcieli utworzyć zmienną liczbową wystarczyłoby "wartość" zamienić na wybraną przez nas liczbę, a gdyby wartość logiczną, to wystarczyłoby wpisać tam true lub false. Gdybyśmy chcieli uczynić z tej zmiennej zmienną globalną wystarczyłoby usunąć słowo local, które oznacza, że ta zmienna będzie dostępna lokalnie. Chodzi o to, że ważność zmiennej lokalnej kończy się przy napotkaniu najbliższej instrukcji end (więcej o niej dowiemy się przy instrukcjach warunkowych) lub końca pliku, natomiast raz zdeklarowana zmienna globalna jest dostępna z każdego miejsca. Ale zmienne nie muszą przyjmować wpisanych przez nas wartości, mogą też przyjmować wartości innych zmiennych. Oto przykład:

local a = 50
local b = a
local c = b + a + 1

Teraz zmienna a ma wartość 50, zmienna b przejmuje wartość od a, czyli również ma wartość 50, a zmienna c dodaje wartość zmiennej a do wartości b i dodaje jeszcze do tego 1, więc 50 + 50 + 1 = 101, czyli c ma wartość 101. Zmienne liczbowe możemy dodawać, odejmować, dzielić oraz mnożyć. Gorzej jest w przypadku łączenia ciągów znaków. Zamiast plusa należy użyć dwóch kropek (..):

local ciagZnakow1 = "kurs"
local spacja = " "
local ciagZnakow2 = "lua"
local wynik = ciagZnakow1 .. spacja .. ciagZnakow2

W tym przykładnie zmienna wynik ma wartość: kurs lua. Tablice omówie w innej częśći, a wartości logicznych nie będę pokazwał, ponieważ nie da się na nich podjąć żadnego działania. Myślę, że jak na razie o zmiennych wystarczy. Teraz przejdźmy do wyświetlania różnych wartości. Przykładowo: mamy wykonać jakieś działanie, np.: 9546461658*1561658 i akurat popsuł nam się kalkulator, windowsowy nie działa, a w szkole nie nauczyli mnożyć pisemnie? Możemy wykorzystać do tego funkcję print, którą dysponuje Lua. Funkcja ta jako parametr przyjmuje wartość, którą ma wyświetlić. Dla tych co nie widzą: parametr(-y) jest to rzecz pomiędzy nawiasami przy funkcji. A teraz przejdźmy do naszego zadania. Wszystko rozwiążę taki kod:

local liczba1 = 9546461658
local liczba2 = 1561658
local wynik = liczba1*liczba2
print(wynik)  -- Wyświetlanie wyniku

Jeżeli dodamy taki skrypt przy wczytywaniu wyświetli nam się liczba 14908308219908964, która jest wynikiem tego działania. Funkcji print najczęściej używa się, gdy nie wiemy jakiego typu jest dana zmienna lub chcemy odkryć jej wartość. Szczególnie przydaje się do znajdowania błędów w skryptach. Parametrem funkcji print nie musi być zmienna liczbowa, może to być również zmienna logiczna jak i ciąg znaków. Dobrze, wiemy już co to są zmienne oraz jak ich używać. Teraz przejdźmy do bardziej zaawansowanych rzeczy, jakimi są instrukcje warunkowe. Instrukcje warunkowe wykonują się tylko w przypadku, gdy coś jest prawdą. Instrukcja ta ma taką konstrukcję:

if(warunek) then
-- Co się wykonuje, jeżeli warunek jest prawdą
end

Warunkiem może być równanie (np. 1 < 2 czy a == B) jak i wartość logiczna. Możemy porównywać zarówno liczby oraz ciągi znaków. Należy pamiętać, aby każdą instrukcję warunkową zakończać instrukcją end. Ona mówi naszemu programowi, że w tym miejscu kończy się instrukcja warunkowa i kod pomiędzy end i instrukcją będzie wykonywany, gdy warunek zwraca prawdę. Są różne typy warunków:

  • > - gdy jedna liczba jest większa od drugiej, np. 5 > 2. Może być używane tylko w przypadku liczb.
  • < - gdy jedna liczba jest mniejsza od drugiej, np. 80 < 120. Może być używane tylko w przypadku liczb.
  • >= - gdy jedna liczba jest większa albo równa drugiej, np. 50 >= 50 oraz 50 >= 49. Używane tylko z liczbami.
  • <= - gdy jedna liczba jest mniejsza albo równa drugiej, np. 50 <= 50 oraz 50 <= 51. Używane tylko z liczbami.
  • == - gdy jedna liczba lub ciąg znaków jest równy drugiemu, np. "a" == "a" albo 1 == 1 lub true == true. Może być używane zarówno z liczbami, ciągami znaków i wartościami logicznymi.
  • ~= - gdy jedna liczba lub ciąg znaków nie jest równy drugiemu, np. "a" ~= "b" albo 1 ~= 100 lub true ~= false. Może być używane zarówno z liczbami, ciągami znaków i wartościami logicznymi.

W tym momencie powinieneś umieć zrobić instrukcję warunkową z jednym warunkiem. A co, jeżeli chcemy sprawdzić kilka rzeczy? Wykonamy kilka instrukcji zanim zaczniemy właściwy kod. To też jest rozwiązanie, ale bardzo nieprofesjonalne oraz czasochłonne zarówno dla procesora jak i do napisania. Zamiast tego możemy użyć słów or i and. Przedstawię teraz prosty przykład ich użycia:

local zmienna1 = 10
local zmienna2 == 20
if(zmienna1 >= zmienna2 or zmienna1 == 10) then
print("Zmienna1 jest wieksza albo rowna zmiennej2 albo zmienna1 jest rowna 10.")
end
if(zmienna1 < zmienna2 and zmienna2 > 5) then
print("Zmienna1 jest mniejsza od zmiennej2 i zmienna2 jest wieksza od 2.")
end

Taki kod najpierw sprawdzi czy zmienna1 (10) jest większe albo równe zmiennej2 (20) co skutkuje fałszem, lecz została użyta instrukcja or, która pozwala na wywołanie jeżeli tylko jeden z warunków jest prawdą. Tak więc przechodzimy do drugiego warunku - zmienna1 (10) jest równe 10, co jest prawdą, więc na ekranie zostanie wyświetlony tekst Zmienna1 jest wieksza albo rowna zmiennej2 albo zmienna1 jest rowna 10.. Następnie nasz program trafia na instrukcję end, która mówi mu, że wychodzimy z instrukcji warunkowej. Ale trafiamy na drugą instrukcję warunkową, która wywołuje się tylko wtedy, gdy zmienna1 jest mniejsza od zmiennej2 i zmienna2 jest większa od 5. Oba te warunki są prawdą, więc funkcja print wyświetli taki tekst: Zmienna1 jest mniejsza od zmiennej2 i zmienna2 jest wieksza od 2.. Teraz przejdźmy do bardziej zaawansowanych rzeczy w instrukcjach warunkowych. Chodzi o instrukcję else, która wywołuje się, jeżeli warunki nie są prawdą. Należy ją umieszczać w miejscu instrukcji end, ale o tej instrukcji też nie należy zapominać. Ma się ona znaleść po ostatniej rzeczy, która ma się stać w momencie, gdy warunek się nie wykonał. Brzmi to trochę dziwne, ale mam nadzieję, że przykład wszystko rozjaśni:

local zmienna1 = 50
local zmienna2 = 51
if(zmienna1 == zmienna2) then
-- Udało się, zmienna1 jest równa zmiennej2
print("zmienna1 jest rowna zmiennej2.")
else   -- A jeżeli nie
print("Nie udalo sie. zmienna1 jest inna niz zmienna2.")
end

Gdy ten przykład się wykona zobaczymy komunikat: Nie udalo sie. zmienna1 jest inna niz zmienna2.. I dobrze, ponieważ 51 to nie jest 50. Tak działa instrukcja else. Ale to nie koniec, jest jeszcze jedna, podobna instrukcja. Chodzi tu o elseif. Jest ona z połączenia dwóch instrukcji: else oraz if. Służy do skrócenia instrukcji warunkowych. Oto przykład jej działania:

local zmienna1 = 80
local zmienna2 = 50
if(zmienna1 < zmienna2) then
print("zmienna1 jest mniejsza od zmiennej2")   -- To akurat się nie wykona, ponieważ 80 jest większe od 50
elseif(zmienna1 == zmienna2) then
print("zmienna1 jest równa zmiennej2")   -- To też się nie wykona, ponieważ 80 jest inne od 50
else
print("zmienna1 nie jest ani mniejsza, ani równa zmiennej2")   -- To się wykona
end

Tych instrukcji elseif możemy wykonywać nieskończoność. I to tyle na temat warunków.

Odnośnik do komentarza
  • 1 rok później...
  • 1 miesiąc temu...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający forum [Tut] Kurs Lua Cz. #1   0 użytkowników
    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...