Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2017-10-19, 20:08


marcin778

Krytyk serwerów MTA






Wiek: 24
Na forum: 4149 dni
Posty: 2268
Nick w MP: Marcineg

Piwa: 4662

Respekt: 1436,8
Respekt: 1436,8

Witam!

W cz??ci pi?tej ju? poradnik?w postaram si? jak najlepiej opisa? dzia?anie wszystkich p?tli w lua.


for
P?tla for jest najcz??ciej stosowan? przez nas w lua p?tl?. Za pomoc? p?tli mo?emy pobra? co? z tabeli, p?tla zwraca nam zazwyczaj klucz oraz warto?? z tej tabeli.
Przyk?adowo
local tbl = {
[1] = 10,
[2] = 20,
[3] = 30,
[4] = 40,
}

for key,value in ipairs(tbl) do
  print(key.. ": "..value)
end
taki kod zwr?ci nam wynik w postaci
Kod:


1: 10
2: 20
3: 30
4: 40

S?owa key oraz value to kolejno klucz oraz warto??, jest to zwyk?a zmienna wi?c zamiast key,value mo?emy da? sobie cyferka,wynik jak chcemy. Musimy te? zwr?ci? uwag? na s?owo po operatorze przynale?no?ci in, czyli w tym przypadku "ipairs", jest to wa?ne, poniewa? ipairs iteruje tylko po kluczach, kt?re s? kolejnymi liczbami naturalnymi, klucze w tym przypadku to te cyfry w nawiasach kwadratowych, wi?cej o cz??ci z tabelami/tablicami. W przypadku takiej tabeli:

local tbl = {
['cukierki'] = 10,
['chipsy'] = 15,
['czekolada'] = 20,
}
nasza p?tla przerwie dzia?anie, poniewa? jak wida? klucze nie s? ju? liczbami naturalnymi tylko s?owami/ci?gami znak?w (stringami), w takim wypadku trzeba u?y? nie ipairs a pairs, gdy? pairs iteruje po wszystkim czyli i po liczbach i po stringach po ka?dych kluczach. Nasz kod z tak? tabel? musi wygl?da? tak:

local tbl = {
['cukierki'] = 10,
['chipsy'] = 15,
['czekolada'] = 20,
}

for key,value in pairs(tbl) do
 print(key..": "..value)
end
tutaj s?owa key,value r?wnie? nie s? konieczne bo mog? by? jakiekolwiek. Taki kod zwr?ci nam nast?puj?cy wynik
Kod:


cukierki: 10
chipsy: 15
czekolada: 20


P?tla for ko?czy si? s?owem "do" i ka?da p?tla for ma swojego end'a. P?tl? mo?emy te? pobra? tylko klucz z tabeli.

local tbl = {
['cukierki'] = 10,
['chipsy'] = 15,
['czekolada'] = 20,
}

for k in pairs(tbl) do
 print(k)
end
taki kod zwr?ci nam
Kod:


cukierki
chipsy
czekolada


W przypadku takiej tabeli:

local tbl = {
{"tekst",1,2,3},
{"tekst2",3,2,1},
}


Kluczem b?dzie ilo?? indeks?w tabeli, w tym przypadku 2 bo s? dwa indeksy/rekordy. Czym jest index itd. dowiecie si? w cz??ci z tabelami/tablicami.
Wszystkie te powy?sze p?tle/przyk?ady stosuje si? najcze?ciej w przypadku tabel. Jest jeszcze jedna metoda p?tli for, jest to p?tla wykonuj?ca si? ilo?? razy w zmiennej.
 for zmienna wartoscwartosc koncowa do

W przypadku takiej p?tli to zmienna zazwyczaj jest liter? 'i' aczkolwiek to bez znaczenia. Przyk?adowo
for cola 0,do
print("Ilo?? butelek napoju: "..cola)
end
wynikiem takiego kodu b?dzie
Kod:


Ilo?? butelek napoju: 0
Ilo?? butelek napoju: 1
Ilo?? butelek napoju: 2
Ilo?? butelek napoju: 3
Ilo?? butelek napoju: 4
Ilo?? butelek napoju: 5

P?tla wykona si? od 0 do 5 razy.

Ka?da p?tla wykonuje si? ile? razy, w zale?no?ci od p?tli. Przyk?adowo

local tbl = {
{1,2,3},
{4,5,6},
}

for k,v in ipairs(tbl) do
print(k,v)
end
w przypadku takiego kodu p?tla wykona si? dwa razy, poniewa? wykona si? ona tyle razy ile jest wszystkich indeks?w w tabeli, dla jasno?ci indeks/index w tabeli to
Kod:

{1,2,3},
w tym przypadku. P?tla wykonuje si? tyle ile jest indeks?w danej tabeli, wyj?tkiem jest p?tla for gdzie podajemy sami warto?? od , kt?rej p?tla ma zacz?? i warto?? na kt?rej p?tla ma si? sko?czy?. Mo?emy tak?e zrobi? tak

local tbl = {
{1,2,3},
{4,5,6},
}

for 1,#tbl do
print(i)
end

wtedy p?tla wykona si? od 1 do wielko?ci tabeli, czyli do tylu razy ile jest indeks?w w niej ( w tym przypadku 2). Z pomoc? takiej p?tli te? mo?emy wyci?gn?? klucz oraz warto?? z tabeli, tyczy si? to ju? bardziej tabel ale poka?? skromny przyk?ad.

local tbl = {
{1,2,3},
{4,5,6},
}

for 0,#tbl do
print(i,tbl[i][1],tbl[i][2])
end


Taki kod zwr?ci nam
Kod:

1 1 2
2 4 5
Po prostu podajemy warto?? z p?tli jako numer indeksu tabeli. Jest r?wnie? jeszcze trzeci argument p?tli numerycznej. Odpowiada on za przeskok warto?ci, czyli

for 1,10,do
 print(i)
end
taki kod nie zwr?ci nam liczb od 1 do 10 kolejno, tylko
Kod:


1
3
5
7
9
Je?li p?tla ma wykonywa? si? w d?? czyli ujemnie to trzeci argument nale?y po prostu poda? jako liczb? ujemn?.

for 10,1, -do
print(i)
end
taki kod zwr?ci nam:
Kod:


10
9
8
7
6
5
4
3
2
1
Takie zastosowanie
 for 10,do
print(i)
end
nie zadzia?a.

My?l?, ?e z p?tli for to by?oby chyba na tyle.

while
P?tla while jest rzadziej u?ywana ale jest spotykana r?wnie?. P?tla while dzia?a jak powtarzaj?cy si? warunek, czyli dzia?a na zasadzie warunku if. Prosty przyk?ad

local liczba 0

while liczba do
print(liczba)
liczba liczba 1
end
Taki kod wykona nam p?tle, kt?ra ma za zadanie do zmiennej liczba dodawa? po 1 przez ca?y czas, gdy zmienna liczba jest mniejsza ni? 5, wynikiem takiego kodu b?dzie
Kod:


0
1
2
3
4
Jak mo?na zauwa?y?, ostatni? liczb? jest 4, poniewa? jest to ostatnia liczba mniejsza od 5. P?tla while dzia?a jak warunek if. Zamiast np
local s 1
if 10 then
s 1
end
mo?na zrobi? tak

local s 1
while 11 do
print(s)
1
end
do momentu gdy s jest mniejsze od 11 czyli nie jest wi?ksze od 10 to jest dodawana jedna warto??. Wynikiem b?dzie
Kod:


1
2
3
4
5
6
7
8
9
10
Czyli przyk?adowo mo?emy zrobi? w zasobie pod mta zamiast

local ped createPed(0,0,0,0)

if isElement(pedthen
print("Ped ju? stoi")
end
mo?na zrobi? tak

local ped createPed(0,0,0,0)

while isElement(ped) do
print("Ped ju? stoi.")
end
Z p?tli while te? ju? raczej na tyle.

repeat until
P?tle repeat until czyli p?tla powt?rzeniowa jest chyba najrzadziej u?ywan? p?tl? w lua (przynajmniej pod mta). P?tla repeat until wykonuje si? jak samo s?owo until oznacza "a?" a repeat "powt?rz" czyli powtarza si? tak d?ugo a? co?. Przyk?adowo

local z 0
repeat
z 1
print(z)
until (5)
taki kod powt?rzy si? tyle razy a? z b?dzie wi?ksze od 5. Wynik b?dzie
Kod:


1
2
3
4
5
6
z b?dzie r?wne 6 wi?c b?dzie wi?ksze od 5 i p?tla zako?czy swoje dzia?anie. Mo?emy te? u?y? p?tli powt?rzeniowej z operatorem not.

local z 0
repeat
z 1
print(z)
until not (5)
"a? nie" czyli a? z nie b?dzie mniejsze od 5 to dodaje nam 1 do z Czyli wynik:
Kod:


1
2
3
4
5
. Jest to jedyna p?tla, kt?ra nie potrzebuje swojego end'a oraz s?owa "do".

Funkcja dotycz?ca p?tli


Istnieje jeszcze co? takiego jak funkcja, niszcz?ca/przerywaj?ca dzia?anie p?tli.

break
Funkcja break niszczy/przerywa p?tle. Przyk?adowo

for 0,do
 print(i)
 if == 3 then
   break
 end
end
taka p?tla nie dojdzie do 5, czyli nie wykona si? 5 razy tylko 3, poniewa? mamy warunek, ?e je?li p?tla wykona?a si? 3 razy to j? przerywamy. Czyli wynikiem nie b?dzie
Kod:


1
2
3
4
5
tylko
Kod:

1
2
3


To wszystko o funkcji break.

Funkcja print nie jest funkcj? mta ani nie jest funkcj? dotycz?c? p?tel., dzia?a ona w mta i wy?wietla ona rezultat w debuggerze (/debugscript 0-3)


Przydatne linki

P?tle for numeryczne: https://www.lua.org/pil/4.3.4.html
P?tle for: https://www.lua.org/pil/4.3.5.html
P?tle while: https://www.lua.org/pil/4.3.2.html
P?tle repeat until(powt?rzeniowe): https://www.lua.org/pil/4.3.3.html
Funkcja print: https://www.lua.org/pil/2.html (Funkcja print wy?wietla tekst na ekranie, w przypadku mta w debuggerze)
Edytor lua online: https://www.lua.org/cgi-bin/demo - Bardzo dobra rzecz do testowania sobie kod?w i uczenia si?. Nie jest to narz?dzie pod mta tylko pod lua, czyli funkcje mta tam nie dzia?aj? bo nie istniej?.

W razie jakich? przeocze?, lub je?li czego? zapomnia?em to piszcie z ch?ci? poprawi?.

Podpis
Moje prace: https://www.youtube.com/c...MuaWGHPp1mhlGnw

-- obecnie
-- obecnie
-- dawniej
-- dawniej
-- dawniej
Ostatnio zmieniony przez marcin778 2017-10-21, 14:45, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 4 piw(a):
STOPseba, kaMMi, Avenged, NoKill1997
Wysłany: 2017-10-20, 10:46


Avenged

Młodszy Szkrypter






Wiek: 23
Na forum: 3510 dni
Posty: 654
Nick w MP: Avenged

Piwa: 1570

Respekt: 326,3
Respekt: 326,3Respekt: 326,3Respekt: 326,3

A,co to jest to print? Dzia?a to na zasadzie outputChatBox czy jak? :)

Podpis
LUA, JS, PHP



Zapraszam do skorzystania z moich usług: Klik

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-10-20, 15:07


marcin778

Krytyk serwerów MTA






Wiek: 24
Na forum: 4149 dni
Posty: 2268
Nick w MP: Marcineg

Piwa: 4662

Respekt: 1436,8
Respekt: 1436,8

BarteQ03, Funkcja print w lua wy?wietla rezultat na ekranie czyli jak outputChatBox w mta, tyle tylko, ?e funkcja print w MTA nie dzia?a jak outputChatBox tylko jak
Więcej informacji znajdziesz w Wikipedii MTA:

outputDebugString
tyle tylko, ?e nie ma tam innych argument?w poza text'em. Czyli w przypadku czego? takiego:


addCommandHandler("pr",function(plr,cmd)
 print("Wpisano komend?.")
end)
informacja "Wpisano komend?" po wpisaniu /pr pojawi si? w debuggerze (debugscript) Jak wiadomo lua nie jest j?zykiem u?ywanym tylko w mta, print w lua to tak jak echo w php :)

Podpis
Moje prace: https://www.youtube.com/c...MuaWGHPp1mhlGnw

-- obecnie
-- obecnie
-- dawniej
-- dawniej
-- dawniej
Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-10-20, 22:35


Jurandovsky

Kurdebele






Wiek: 17
Na forum: 4838 dni
Posty: 915

Piwa: 2697

Respekt: 955,3
Respekt: 955,3Respekt: 955,3

W p?tli for: "for i = wartosc start, wartosc end do" nie wspomnia?e? o jednej wa?nej rzeczy, mianowicie, testowa?em co? takiego jak:

for i = 10, 1 do
print(i)
end

na lua.org oraz w MTA i kompilator nie wiedzia? co zrobi?.

Ta rzecz o kt?rej mianowicie zapomnia?es to 3 argument takiej p?tli, kt?ry sygnalizuje warto?? przeskoku :


for 110do
print(i)
end

-- 1
-- 3
-- 5
-- 7
-- 9


Gdy p?tla ma iterowa? od g?ry do do?u, to wtedy taki argument trzeba uwzgl?dni? jako minus:


for 101, -do
print(i)
end -- dobrze


for 10do
print(i)
end -- niedobrze


Podpis
Jedyny kontakt ze mną to PW forum

Kod:


local noobs = getElementsByTitle("player", "Programista LUA")
for k, v in ipairs(noobs) do
outputChatBox("Bez mózgu jest użytkownik o nicku: "..getPlayerName(v), root)
destroyElement(v)
end
Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 1 piw(a):
marcin778
Wysłany: 2017-10-21, 13:17


Szydlo

Stance Works






Wiek: 25
Na forum: 3585 dni
Posty: 343
Nick w MP: Szydlo

Piwa: 4

Respekt: 105,3
Respekt: 105,3

marcin778, Dobry poradnik, tylko mam pytanie. Ile masz jeszcze zamiar zrobi? poradnik?w?

[ Dodano: 2017-10-21, 13:23 ]
A, i czy masz zamiar sko?czy? kurs?

Podpis
Aktualny najlepszy kontakt do mnie: Szydlo#8134 (Discord)
Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-10-21, 14:39


marcin778

Krytyk serwerów MTA






Wiek: 24
Na forum: 4149 dni
Posty: 2268
Nick w MP: Marcineg

Piwa: 4662

Respekt: 1436,8
Respekt: 1436,8

Jurandovsky, Rzeczywi?cie, dzi?ki za popraw? i uzupe?nienie wiadomo?ci.

Szydlo, Przeszkadzaj? ci moje poradniki? Nie wiem, staram t?umaczy? si? bardziej podstawy ale na pewno jeszcze troch? cz??ci b?dzie. Czy kiedy? sko?cz? kursy? No wiadomo nic wiecznie nie trwa, tematy si? w ko?cu wyczerpi? i kiedy? ten ostatni poradnik/kurs si? pojawi jako ju? ostatnia cz??? ale to daleka przysz?o?? :)

Podpis
Moje prace: https://www.youtube.com/c...MuaWGHPp1mhlGnw

-- obecnie
-- obecnie
-- dawniej
-- dawniej
-- dawniej
Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-10-21, 18:34


Szydlo

Stance Works






Wiek: 25
Na forum: 3585 dni
Posty: 343
Nick w MP: Szydlo

Piwa: 4

Respekt: 105,3
Respekt: 105,3

marcin778, Nie, w?a?nie i s? potrzebne i r?b je. Najpierw Zr?b te najwa?niejsze rzeczy(z kt?rych najcz??ciej u?ywa), a potem takie poboczne.

[ Dodano: 2017-10-21, 18:34 ]
No i szanuje, bo zrobi?e? wi?cej ni? dwa kursy.

[ Dodano: 2017-10-22, 10:18 ]
MonsteR2002, Lepiej ?eby najpierw wyt?umaczy? podstawy, a potem samemu zrozumiesz, oraz samemu zrobisz.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-01-07, 19:47


PolskiSebek12

Programista






Wiek: 28
Na forum: 4346 dni
Posty: 343
Nick w MP: CrosRoad95

Piwa: 3883

Respekt: 288,8
Respekt: 288,8Respekt: 288,8Respekt: 288,8

Ostrzeżeń: 100%
nie pokaza?e? jak zrobi? p?tle "bez p?tli" czyli rekurencje

Podpis
Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-01-09, 15:25


DevJumpDj

VILLAGE MTA






Wiek: 27
Na forum: 3474 dni
Posty: 102
Nick w MP: D4NTE

Piwa: 3277

Respekt: 121
Respekt: 121

Bardzo dobre lekcje piszesz musz? przyzna?. Oby tak dalej bo naprawd? nowe osoby ucz?ce si? lua mog? wyci?gn?? du?o z twoich lekcji :D

Podpis


VILLAGE MTA - www.villagemta.pl
D4NTE Właściciel serwera
Postaw piwo autorowi tego posta
 

 
Tagi: lua :: kurs :: lekcja :: nr.
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » LUA » Poradniki do LUA » Lua Kurs Lekcja nr. 5 Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku