Skocz do zawartości
szymex

Od zera do LUA Mastera - Warunek if oraz pętle

Rekomendowane odpowiedzi

Witajcie w kolejnym moim poradniku. Jak wspominałem dzisiaj przerobimy warunek if oraz
poznamy pętle for, while, repeat.

Warunek if.
Dobrze, na początku pokażę Wam budowę:
'if warunek then' Czyli tłumacząc to na polski: 'jeżeli warunek to...'
Co możemy wykorzystać w miejscu warunku?:
- operatory relacji
- operatory logiczne
- zmienne
Warunek jak sama nazwa wskazuje ma tworzy warunek którego wynikiem może być prawda, albo fałsz. Przykłady:

local a = 1
local b = 2
local x = nil
if a == b then --ten warunek zwróci false (fałsz)
if a ~= b then --ten warunek zwróci true (prawdę)
if a < b then --ten warunek również zwróci true
if(x) then --ten warunek zwróci false, ponieważ zmienna x jest pusta, posiada wartośc 'nil' (takie nic)
if(a) then --natomiast ten warunek zwróci nam prawdę, bo zmienna a posiada jakąś wartość.

Teraz poszerzymy trochę nasz warunek tworząc taki blok kodu:

if a == b then
    --zawartość, jakiś kod, funkcje, cokolwiek
end

I teraz gdy warunek powyżej zwróci nam true wykona się 'zawartość', czyli to co jest pomiędzy 'then' a 'end' (w PAWN są to klamry).
W przypadku, gdy warunek zwróci nam false zawartość zostanie pominięta.

Dodajmy do naszego warunku jeszcze taki element jak 'else', czyli tłumacząc to na nasz 'lub'. Przykład:

if a == b then
    -- zawartość
else
    --zawartość_2
end

Teraz, gdy warunek zwróci nam true wykona się pierwsza zawartość, a gdy warunek zwróci false wykona się zawartość_2. Prawda, że proste?
No to jeszcze więcej:

if a == b then
    -- zawartość
elseif a > b then
    -- zawartość_2
else
    -- zawartość_3
end

W tym przypadku, gdy warunek pierwszy zwróci true, wykona się zawartość pierwsza. Natomiast, jeżeli warunek pierwszy zwróci false, zostanie sprawdzony warunek drugi i jeżeli on również zwróci false to wykona się zawartość trzecia.

Pętla for.
Moim zdaniem najpopularniejsza pętla, nie tylko w LUA. Zbudowana jest następująco:

for wartośc_początkowa, maksymalna_wartość do
    -- zawartość
end

Przykład:

local i
for i=1, 5 do
    -- zawartość
end

Pętle wyżej wykona się pięć razy (zawartość zostanie wykonana pięć razy).
Przykład 2:
local i

for i=1, 5 do
    print(i) -- wyświetlamy na konsoli wartość zmiennej 'i'
end

Po wykonaniu takiej pętli na konsoli powinno się nam kolejno wyświetlić 1 2 3 4 5
Pętla for i jej zastosowanie w przypadku tabel, w kolejnym poradniku o tabelach...

Pętla while.
Kolejna pętla o następującej budowie:

while warunek do
    -- zwartość
end

Działa ona w ten sposób, że dopóki warunek będzie zwracał true zawartość będzie się wykonywać (powtarzać).
Przykład:

local i = 1
while i < 5 do
    print(i) -- wyświetlamy na kosoli wartość zmiennej 'i'
    i = i + 1 -- dodajemy +1 do i
end

Pętla powyżej wyświetli nam na konsoli: 1 2 3 4
Oczywiście warunków może być kilka, wystarczy zastosować operator logiczny.

Pętla repeat.
Działa ona podobnie jak while tyle, że ona będzie się wykonywać dopóki warunek będzie zwracał false, a nie true. Przykład:

local i = 3
repeat
 print(i)
 i = i - 1
until (i == 0)

Pętla powyżej wyświetli na konsoli: 3 2 1

Dodatkową pomocną funkcją w przypadku pętli jest 'break', który natychmiast zatrzymuje pętle.
Na przykład:

local i = 1
for i=1, 10 do
    if i == 5 then break end
    print(i)
end    

Na konsoli pokażę się nam: 1 2 3 4. W przypadku, gdyby usunąć 'break' wyświetliło by się nam: 1 2 3 4 5 6 7 8 9 10

Jak widzicie język LUA staję się coraz prostszy. Jeżeli macie jakieś pytania lub czegoś nadal nie rozumiecie, zadawajcie je śmiało, a przytoczę Wam więcej przykładów i postaram się coś wyjaśnić.
W kolejny poradniku tabele...

Autor: szymex
Zakaz kopiowania i rozpowszechniania bez mojej zgody!

Edytowane przez szymex

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie napisałeś co te "znaczki" w warunku oznaczają. Ja np. nie wiem co robi:

if a ~= b then --ten warunek zwróci true (prawdę)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie napisałeś co te "znaczki" w warunku oznaczają. Ja np. nie wiem co robi:

if a ~= b then --ten warunek zwróci true (prawdę)

Jeśli a jest różne od b wtedy... ~= to to samo, co != w PAWN.

Edytowane przez GtaGamer

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Co do pętli for, to z tego co kojarzę to ma ona nieco inną budowę, niż przedstawiona przez Ciebie tj. 

for wartośc_początkowa, maksymalna_wartość do
-- zawartość
end

Z tego co sam pamiętam, oraz z tego co przypomniałem sobie dzięki google, pętla 'for' ma taką budowę:

for wartośc_początkowa, maksymalna_wartość, przyrost do
-- zawartość
end
I przykładowo kod:
for i=1, 10, 2 do
print(i) 
end
wyświetli wartości 1, 3, 5, 7, 9. Poza tym myślę, że warto też podać przykład przyrostu o 'część po przecinku', bo z tego co widzę na jednej ze stron o pętli 'for', w LUA też istnieje taka możliwość. Dawno nie bawiłem się tym językiem, ale wydaje mi się, że tak to powinno być.

W każdym razie fajnie, że ktoś się zajął tą tematyką. Jak kiedyś znowu najdzie mnie ochota na pisanie modów do MTA to możliwe, że skorzystam z tych tematów w ramach przypomnienia sobie jak ten język wygląda :)
 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

n00ben masz rację, istnieje coś takiego, aczkolwiek jest to potrzebne tylko przy przeskokach >1, gdyż jest warunek opcjonalny (równy 1).

Plus co do twojego przykładu, to trzeba by dodać zabezpieczenie, bo przeskok w tym przypadku co 2 nigdy nie da 10 i może być problem ;)

Edytowane przez szymex

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ę.

×