Autoplay Media Studio Eğitimi 2

guclusat

Tanınmış Üye
Süper Moderatör
Döngüler (gelişmiş anlatım)

Döngüler kısaca birden çok komutu tekrar etmek için veya tablodan veriyi çekip kullanmak için kullanılır ve işimizi çok kolaylaştırır.

for döngüsü

Bu döngü belirttiğimiz bir sayı adedince yada eşleştirdiğimiz tablodaki veri sayısınca komutları tekrar eder.

for i =1,100 do

end
for -- döngü tipi
i -- index
1 -- başlangıç
100 -- bitiş
do -- yap emri

Basit bir for döngüsü bu şekildedir. Başlangıç ve bitiş adedi arasındaki sayı kadar içerdeki komutları tekrar eder. 1,100,5 yaparsak 5 sayısı adımı belirtir. Yani komut tekrarını başlangıç ve bitiş adedince ve 5 er 5 er atlayarak yapar. Şimdi anlamanız için açıklayıcı bir örnek verelim.

ListBox’a veri ekleme (örnek):

for i=1,100 do
ListBox.AddItem(“ListBox1”, “Eklenen veri: “ .. i)
end

Bu kod Listbox’a Eklenen veri: 1, Eklenen veri: 2 şeklinde 1’den 100’e kadar satır ekleyecektir.

nSayi = 0;
for i=1,100 do
nSayi=nSayi+1
end
Dialog.Message("Sayı:", nSayi)

Bu örnek ise nSayi değişkenine 100 kere +1 yapacak ve sonuç olarak 100 sayısını verecektir.

Yukardaki örnekler komut tekrarları içindi. Şimdi bir tablodan döngü ile nasıl veri çekeceğimizi görelim. Öncelikle bize bir tablo lazım, tablomuzu oluşturup gelen verileri Listbox’a ekleyelim. Bunun için en güzel örnek sanırım File.Find() fonksiyonu ile olur.

Quote
for i,v in pairs(tablo) do

end

for -- döngü tipi
i -- indeks
v - gelen veri
pairs -- eşleştir
tablo -- tablo adı
do -- yap emri
Örnek:

tAra = File.Find("C:\\Windows", "*.exe", false, false, nil, nil)
for i,v in pairs(tAra) do
ListBox.AddItem("ListBox3", v, "")
End

Bu kodlar C:\Windows klasorunde exe uzantılı dosyaları bulma sırasıyla Listbox’a ekleyecektir. Burada dikkat etmemiz gereken i ve v argümanı. i argümanı döngünün o andaki sıra nosunu, v argümanı ise o sıra nonun karşısındaki veriyi ifade eder. Örneğin yukardaki kodda tAra = C:\Windows dediğimizde bulduğu sonuçları şu şekilde listeler:

1 C:\Windows\ALCMTR.EXE
2 C:\Windows\ALCWZRD.EXE
3 C:\Windows\explorer.exe
4 C:\Windows\hh.exe
5 C:\Windows\MicCal.exe
6 C:\Windows\NOTEPAD.EXE
7 C:\Windows\patchx86.exe
8 C:\Windows\regedit.exe
9 C:\Windows\RtaUpd.exe
0 C:\Windows\RTHDCPL.EXE
11 C:\Windows\RtkAudioService.exe
12 C:\Windows\RTLCPL.EXE
13 C:\Windows\RtlUpd.exe
14 C:\Windows\SkyTel.exe
15 C:\Windows\SOUNDMAN.EXE
16 C:\Windows\TASKMAN.EXE
17 C:\Windows\twunk_16.exe
18 C:\Windows\twunk_32.exe
19 C:\Windows\vncutil.exe
20 C:\Windows\winhelp.exe
21 C:\Windows\winhlp32.exe
En baştan başlayalım:

C:\Windows\ALCMTR.EXE
Sırasında;

Quote
i = 1 olur
v = C:\Windows\ALCMTR.EXE olur.
C:\Windows\ALCWZRD.EXE
Sırasında;

Quote
i = 2 olur
v = C:\Windows\ALCWZRD.EXE olur.
bu şekilde devam eder. yani i her v için sıra numarasını ifade eder.

yukarıda verdiğimiz

Quote
ListBox.AddItem("ListBox3", v, "")
kodda geçen v ile i sırasındaki verileri tek tek listboxa ekler. Sadece Dosya isimlerini eklemek isteseydik kodumuz şu şekilde olmalıydı:

tAra = File.Find("C:\\Windows", "*.exe", false, false, nil, nil)
for i,v in pairs(tAra) do
tAyir = String.SplitPath(v)
ListBox.AddItem("ListBox3", tAyir.Filename, "")
End

** String.SplitPath() fonksiyonu bir dosya yolunu Sürücü, Klasör, Dosya Adı, Dosya Uzantısı şeklinde ayrılmasını sağlar.

for döngüsünü durdurmak

Bazı durumlarda for döngüsünü bir koşul ile durdurmak isteriz. Yukardaki örnekten yola çıkarak devam edelim.

tAra = File.Find("C:\\Windows", "*.exe", false, false, nil, nil)
for i,v in pairs(tAra) do
ListBox.AddItem("ListBox3", v, "")
End

burda C:\Windows klasöründeki tüm dosyaları bulup listboxa ekletiyoruz. Ama diyelim ki C:\Windows\SOUNDMAN.EXE dosyasını bulduğumuz zaman ekletmeyi kesmek istiyoruz. bunun için break kullanmalıyız şöyleki:

tAra = File.Find("C:\\Windows", "*.exe", false, false, nil, nil)
for i,v in pairs(tAra) do
ListBox.AddItem("ListBox3", v, "")
if v == "C:\Windows\SOUNDMAN.EXE" then
break;
end
End

yani döngüdeki v, C:\Windows\SOUNDMAN.EXE verisine eşitse döngüyü durduk dedik. break argümanı kısaca bu şekilde kullanılır.


while döngüsü

bu döngü belli koşullar altında döngünün gerçekleşmesini sağlar.

Örnek2:

a = 1; -- a değişkenine 1 sayısını atadık. yani a artık bir number (sayı)
while a < 10 do -- a değeri 10'dan küçük olduğu sürece döngüye devam et dedik
a = a + 1; -- a değerini+1 ekleyerek tekrarla (yani a zaten 1 idi. +1 eklersek 2 olacak, 3 olacak ve böyle devam edecek)
end -- bitir.

bu örnek a değeri 10'dan büyük olduğu anda duracaktır. Çünkü koşulumuz o şekildeydi.

Örnek2:

count = 1; -- count değerine 1 sayısını ata
while count < 100 do -- count değeri 100 sayısından küçük olduğu sürece döngüye devam et
count = count + 1; -- count değerine +1 ekle
if count == 50 then -- eğer count 50 sayısına eşit olursa
break; -- döngüyü durdur
end
end

Bu örnek ile 1. örneğin arasındaki fark, 2. bir koşul ile döngüyü durdurmamız.

** while döngüsünü for döngüsünde olduğu gibi tablolardada kullanabiliriz. Özellikle SQLite3 gibi veritabanı işlemlerinde veri çekmek için çokça kullanmamız gerekir.

Repeat

Bu döngü adındanda belli olduğu gibi istediğimiz koşullar gerçekleşene kadar bazı işlemleri tekrar ettirmek için kullanırız.

i = 1; -- i değişkenine 1 sayısını ata
repeat -- tekrarla
i = i + 1; -- i değişkenine +1 ekle
until i > 10 -- i değişkeni 10 sayısından büyük olana kadar devam et.




Anlatım KintaRo'ya aittir.
 
Geri
Yukarı