Döngüler: While, for, do until, for in

Bu aralar çok hızlıyım, makalelerin ardı arkası kesilmiyor. Geçen google da aradım (dün xD) autoit script nedir? diye tüm makaleler benim alla alla dedim ne kadar çok siteye yazmışız :d Neyse konumuz döngüler.

Döngü nedir: dönüp dolaşıp aynı yere gelmek :D
Şöyle devam edelim, dünyayı düşünün. her gün döner. dönerde döner. Ama hep aynı noktaya geri gelir. Sabah olur, akşam olur, 0 noktasından başlar 360 döner tekrar 0 a gelir. İşte döngü bu. Bir au3 scriptte: tüm döngüleri bu anlattığımız örneğe uyarlayabiliriz.

While $dunya = "donuyor"
bunu bunu yap...
Wend
For $i = 0 to $dunyanın_gunleri Step 1
bunu bunu yap.
Next
Do
bunu bunu yap.
Until $dunya <> "dönüyor"
Dediğimiz gibi dünya dönüyor, hiç birşey değişmiyor hareketinde. Ama içeriği sürekli bir değişim halinde. Aslında bu değişimi kullanabilirizde kullanmayabilirizde. Döngü sürekli aynı şeyi tekrarlamak demektir ancak, değişkenler işin içine girince herşey yapılabilir. Dediğim gibi yine dünyayı düşünün. Döner durur ama içerdeki hayat değişkendir. Her insan 1 gün daha yaşlanır, kimisi ölür, kimisi kalır.

Autoitde en çok işinize yarayacak döngü türü while dır.
Case değilde fonksiyon tabanlı bir script oluşturduğunuzda fonksiyonlara geçmeden:
While 1
.........
Wend
kısmını görürsünüz. Bu kısım, scriptin ana döngüsüdür. Bu döngü, script sonlandırılana kadar çalışacaktır. While 1 dediğimizde bu ana döngü oluyor. 1 scriptin açık bulunduğu an anlamına gelir. Script sonlandığında bildiğiniz üzere bu 0 olur ve döngü biter. İlk olarak bu döngünün içinde bir Sleep(100) görürüz. Bu scriptin açık kaldığı süre boyunca 100mili saniye aralıklarla işlem göreceği anlamına gelir. Sleep'i kaldırırsak cpu muz yorulur. Çünkü script döngüyü hiç duraklamadan aralıksız döndürür, buda daha fazla işlemci gücü demektir.

While dan örneklerle devam edelim.
Bir download scripti hazırladığımızı var sayalım. Macrolar bölümünü okuduysanız bilirsiniz, @inetgetactive download işleminin aktif olduğunu bildiren macrodur ve @inetgetbytesread o ana kadar indirilen byte miktarını döndüren macrodur.

While @inetgetactive
tooltip(@inetgetbytesread)
Wend

msgbox(download bitti)
Buradaki döngü, download işlemi bitene kadar sürecektir. Download işlemi süresince tooltipde bize indirilen miktarı gösterecektir. Ayrıca burada hatırlamamız gereken şudur: download aktif olduğu sürece script sadece o döngü içerisinde çalışacaktır. Yani istediğimiz şey wend den sonraysa download bitene kadar beklememiz gerekir :) Msgbox örneği gibi. Ancak download bittiğinde mesaj kutusu gözükecek ve download bitti diyecektir. Nedeni döngünün sonlanmış olması ve scriptin wend satırından sonraki satıra geçmesidir. For a geçmeden basit bir örnek daha verelim:
$sayalim = 0;
$saydik = 0;

While $saydik = 0
$sayalim += 1
if $sayalim = 10 then
$saydik = 1
endif
Wend
10 kadar saydık. ve döngümüz sonlandı. çünkü saydik sıfıra eşitse döngü yap dedik. sayalım değişkeni 10 olduğunda saydık değişkenini 1 yaptık ve döngü sonlandı. Bunu daha pratik olarak 1 değişkenlede yapabilirdik. $sayalım = 0 derdik ve While $sayalım < 10 derdik.

For, döngüsü basit anlamla: a kadar görevlerinde kullanılır. Yine sayalım.
For $i = 0 to 10 Step 1
tooltip($i)
Sleep(1000)
Next
Yukarıdaki örnekde tooltipde 1 den 10 kadar sayacak ve her aralıkda 1 saniye bekleyecektir. Detaya inelim biraz. Forda değişmeyen tek şey $i dir. bu $z de olabilir $c de. For kullanacaksak (bazı durumlar hariç) bir değişken tanımlamalı ve onu arttırmalıyız. (veya azaltmalıyız)

to 10 kısmı 10 a kadar demektir. 0 dan 10 kadar. Step 1 kısmı kaçar aralıklarla ilerleyeceğimizi belirtir. mesela step 2 deseydik, tooltip de 1, 2, 3, 4, yerine 2, 4, 6 sayılarını görecektik. For profesyonel anlamda çok işe yarar bir döngüdür. Array kullananlar bilirler :) For un tek dezavantajı, for döngüsüne giren bir script diğer fonksiyonlarla alakasını keser. Kestirmemenin yolları vardır tabiki. (kesmemiş gibi göstermenin) For döngüsü içinde bir scriptin dünyadan haberi olmayacaktır taki döngü bitene kadar :D script donuyormuş gibi düşünün.

Do, until: beklediğimiz birşey olana kadar şunu yap yerine kullanılır.
$say = 0
Do
$say += 1
msgbox($say)
until $say > 10
Say 10 olana kadar 1 değer atlatıp mesaj kutusu çıkarır. say 10 dan büyük olduğunda döngü sonlanır. Burada $say değişkenini 1 satır aşağıya alırsak, yani do altına, döngünün içine: döngü sonlanmayacaktır, bıraksan sonsuza kadar gider :D Nedeni basit. $say ı 1 değer arttırmamıza rağmen döngünün en başında tekrar 0 a eşitliyoruz. 1 artacak, dönüp dolaşıp başa geldiğinde tekrar 0 olacak.

Şimdi bunları basit olarak nerelerde kullanabiliriz (1er örnek):
Do until: bir kullanıcı adı şifre isteyen program düşünün. Scriptin en başına do untili koyarız, istediğimiz şifre gelene kadar satır atlamaz ve formu göstermez.

While için zaten download olayını verdik. Bunun dışında saat düşünün. Formun bi köşesine saat koyarız ve sleep(1000) ile beraber ana döngümüzde saati ayarlatırız. Script açık olduğu sürece bu devam eder.

For: Bir mp3 çalar yaptığımızı düşünelim. Bir klasördeki tüm mp3leri aldırdık ve arrayda topladık. For $i = 0 to $array_max deriz, toplam mp3 sayısına kadar bir listboxa şarkıları yazdırırız, satır satır.

Bu aşamadan sonra size hayal gücünüzü kullanmak kalıyor. Yapabileceğiniz şeylerin sınırı yok. Ufak ufak denemeler yaparak, test ederek sonucu elde edebilirsiniz. Aklınıza takılan yeri sormaktan çekinmeyin kankalar :D

Hiç yorum yok:

Yorum Gönder