Skocz do zawartości
Neproify

#1 LUA SCHOOL - podstawy języka.

Rekomendowane odpowiedzi

No cóż... Nadszedł ten moment gdy ja także napiszę własny poradnik. No ale cóż... W tym temacie opiszę podstawy języka LUA, jego strukturę, itd oraz zastosowanie w MTA.

 

Po pierwsze - po wszystkie informacje, funkcje, itd. najlepiej zajrzeć na oficjalną wiki MTA - http://www.wiki.multitheftauto.com

 

1. Klamry

 

Język ten różni się od c++, pawn, itd. między innymi tym, że zamiast klamr pisze się wyraz "end".

 

Tak wygląda to w c++:

function blablabla(jakistamargument)
{
}

W LUA wygląda to tak:

function blablabla(jakistamargument)
end

Czyli nie ma klamr otwierających, są tylko zamykające. Proste?

 

2. Instrukcje warunkowe, warunki logiczne

 

Tradycyjna konstrukcja instrukcji warunkowej to:

if costam then
end

Jak widać musimy umieścić tutaj warunek logiczny, dodatkowo pojawia się tutaj słowo "then". Nie trzeba stosować tutaj nawiasów, aczkolwiek przy większych instrukcjach warunkowych jest to wskazane w celach lepszego rozumienia kodu.

 

Warunki logiczne to między innymi:

== -- równa się
~= -- jest inne od
< -- jest mniejsze
> -- jest większe
<= -- jest mniejsze lub równe
=> -- jest większe lub równe

Przykładowe zastosowanie - zmienna a równa się zmiennej b:

if a == b then
    -- Coś tam się dzieje
end

3. Funkcje

Funkcje to instrukcja dla maszyny że ma coś zrobić. Jest możliwość zdefiniowania własnej funkcji. Przykładem funkcji może być outputDebugString. Służy ona do napisania jakiegoś tekstu w konsoli. Posiada ona argument - tekst do wyświetlenia. Przykładowe zastosowanie we własnej funkcji:

function command_print(text)-- funkcja command_print z argumentem "text"
    outputDebugString(text) -- wykorzystujemy zmienną "text" która została podana w funkcji.
end

Jak widzicie jest to proste.

 

4. Układanie kodu

Ważną rzeczą jest układanie kodu - wielu początkujących programistów nie układa kodu, a jest to ważne dla przejrzystości kodu.

Jak widzieliście wcześniej robiłem odstęp klawiszem "tab" - układałem kod.

Kod układa się jak wspomniałem klawiszem "tab". Jak wiadomo klawisz ten robi odstęp na kilka znaków.

Należy stosować to po każdym otwarciu klamry(w c++).

Przykład układania kodu:

function blablabla(blablablaa, blabla)
    if blablablaa == blabla then
        outputDebugString("blablablaa jest równe blabla")
    end
    if blablablaa ~= blabla then
        outputDebugString("blablablaa jest równe blabla")
    end
end

5. Komentarze

Kolejną ważną rzeczą są komentarze. Na początku kod jest łatwy do zrozumienia, aczkolwiek z przypływem linijek sam autor może mieć problem ze zrozumieniem co on robi. W komentarzach można dawać nie potrzebny obecnie kod, lub taki który nie nadaje się do wersji produkcyjnej. Możemy tam dawać również spostrzeżenia, co ręka napisze ogólnie.

Są dwa rodzaje komentarzy - jednoliniowe i dwuliniowe. W LUA komentarz jednoliniowy zaznaczamy w taki sposób:

-- TODO: coś tam

Zostanie on pominięty przy kompilacji. Dwuliniowy zaznaczamy w ten sposób -

--[[
Coś tam, jakieś
info,
coś tam
info
]]--

Przy pomocy [[-- otwieramy komentarz dwuliniowy, a za pomocą --]] go zakańczamy.

 

6. Podręczny słowniczek

Większość słówek jest taka sama jak w innych językach programowania - zmienna, tablica, itd.

W MTA dodatkowo dochodzą słowa takie jak:

Event - wydarzenie które dzieje się gdy coś tam. Czyli ogólnie jest to taki odpowiednik "callback'a" w języku PAWN.

 

To be continued.

Edytowane przez Neproify

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

function blablabla(blablablaa, blabla)
    if blablablaa == blabla then
        outputDebugString("blablablaa jest równe blabla")
    end
    if blablablaa ~= blabla then
        outputDebugString("blablablaa jest różne blabla") //tu chyba powinno być "różne", a nie "równe"
    end
end
Poradnik spoko, ale nie opisałeś podstawowych rzeczy - komentarzy, zmienne, tablice, definicje.

I mam takie pytanie - czy w LUA nie stawia się średnika na końcu każdej linii tak jak w PAWN?

Czekam na kolejne części, ponieważ mam zamiar poznać LUA.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Drakon, średnik jest ignorowany przez interpreter.

A ja czekam na następną część i opisane wszystko to, co jest w tym kawałku kodu:

for i in io.lines()do print(2^#i:gsub("[^TDLF]",""))end
Edytowane przez Shiny

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No cóż... Nadszedł ten moment gdy ja także napiszę własny poradnik. No ale cóż...

Po takim wstępie, czekam z wypiekami na twarzy na następną część poradnika. Od razu czuć bijącą pewność siebie autora i wiarę w to co pisze. 

Nie no, powaga, takich wstępów się nie robi prezentując cokolwiek. W treści poradnika, mogłeś napisać na prawdę wspaniałe i mądre rzeczy, ale ja i pewnie jeszcze kilka osób, tego nie przeczytam bo uzna że to strata czasu. 

Edytowane przez AxL_

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
function blablabla(blablablaa, blabla)
if blablablaa == blabla then
outputDebugString("blablablaa jest równe blabla")
end
if blablablaa ~= blabla then
outputDebugString("blablablaa jest równe blabla")
end
end

rownie dobrze mozna usunac end ze srodka i zamiast drugiego if uzyc elseif.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
function blablabla(blablablaa, blabla)
if blablablaa == blabla then
outputDebugString("blablablaa jest równe blabla")
end
if blablablaa ~= blabla then
outputDebugString("blablablaa jest równe blabla")
end
end

rownie dobrze mozna usunac end ze srodka i zamiast drugiego if uzyc elseif.

 

Równie dobrze możesz środkowe end zastąpić else i usunąć drugi warunek. Why not?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak bedziesz wspominal o funkcjach w Lua i MTA - nie zapomnij napisac kilka słów o funkcjach anonimowych! ;)

Typu:

addEventHandler("onPlayerJoin", root,
   function() 
      outputChatBox("Hej! " .. getPlayerName(source) .. " witamy Cie na czymstam!", source)
end)
Edytowane przez l0nger

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×