Bölüm Seviyesi: Başlangıç

Bu bölümde işlenecek konular:

For döngüsü

ipairs yineleyicisi

pairs yineleyicisi

Bu bölüm, kendisinden önceki bölümlerdeki konseptlerin tümü ile ilgili bilgi gerektirir.

For Döngüsü

For, ingilizce “için” anlamına gelen kelimeden gelir. Lua programlamada iki farklı for döngüsü vardır ve bugün her ikisini de inceleyeceğiz.

1) “Numeric” (Sayısal) For Döngüsü

Sayısal for döngüsü, belli bir aralıktaki sayıların üzerinden sırayla geçer. Aşağıdaki gibi yazılabilir:

Yukarıdaki kod, sırası ile şunları yapar:

Döngü başlar.

i=1 için print(i) gerçekleşir, panele 1 yazılır

i=2 için print(i) gerçekleşir, panele 2 yazılır

i=3 için print(i) gerçekleşir, panele 3 yazılır

i=6 için print(i) gerçekleşir, panele 6 yazılır

Döngü biter.

Bu halinden bile,  neden For döngüsünün önemli olduğunu anlayabilirsiniz sanırım. Ama dahası gelecek.

Yukarıda gösterilenin dışında, for döngüsü bir de aşağıdaki gibi yazılabilir:

Yukarıdaki döngüdeki ilk iki sayı aralığı, üçüncü sayı ise atlama miktarını belirtir. Yukarıdaki kod şunu yapar:

Döngü başlar.

i=1 için print(i) gerçekleşir, panele 1 yazılır

i=3 için print(i) gerçekleşir, panele 3 yazılır

i=5 için print(i) gerçekleşir, panele 5 yazılır

Döngü biter

Döngü 5’te biter çünkü 5’ten sonra bir kez daha i’ye 2 eklemek 7 vereceğinden 1,6 aralığından çıkılmış olur.

for döngüsünde eğer atlama miktarı belirtilmezse, atlama miktarı 1 kabul edilir. Dolayısıyla, bir for döngüsü sondan başa sayabilir ancak bu aşağıdaki gibi yapılamaz:

Bunun çalışmamasının nedeni, her basamakta 1 arttırarak (standart atlama miktarı 1’dir) 6’dan 1’e ulaşmaya çalışmasıdır. Bu kod hata vermez ancak for döngüsünü tamamen boş geçer. Bunun doğrusu şu şekildedir:

Bu kod, her defasında i’ye -1 ekleyerek 6’dan 1’e ulaşır.

Pratik Uygulama

1) 1 ile 100 arasında bulunan her sayının 5’e bölümünü panele yazan bir program yazınız.

2) 100’den 1 doğru sayarak en sonunda panele kelime olarak sıfır yazan bir program yazınız. *Çıktı şu şekilde olmalıdır:

100

99

98

1

sıfır

Eğer 2. pratik uygulamayı yaparken istenmeyen bir çıktı ile karşılaşırsanız tekrar deneyiniz.

Her iki uygulamayı yaptıktan sonra, aşağıya geçiniz.

2) “Generic” For Döngüsü

Bu döngüyü anlamak için önce tabloları (Bölüm 4) anlamanız gerekmektedir. Hatırlatma:

Tablo, sıralanmış bir veri topluluğudur.

a) tablo={41,23,12} gibi yazılabilir. Bu durumda:

41’in sıra numarası (endeksi) 1,

23’ün endeksi 2,

12’nin endeksi 3’tür.

b) tablo={x=41,y=23,z=12} gibi de yazılabilir. Bu durumda:

41’in sıra numarası (endeksi) 1 ve ona karşılık gelen anahtar kelime (key) x’dir.

23’in endeksi 2 ve ona karşılık gelen key y’dir.

12’in endeksi 3 ve ona karşılık gelen key z’dir.

Bunun tekrar üstünden geçtiğimize göre, generic for döngüsüne başlayabiliriz.

Generic for döngüsü, bir tablodaki elemanların üstünden sırayla geçer. Lua’da iki şekli vardır:

a) ipairs yineleyicisi ile for döngüsü

“index pairs” yani endeks çiftleri anlamına gelen ipairs, bir yineleyicidir. Yineleyici (iterator), bir veri topluluğunun (bu durumda tablo) elemanlarını sırayla okuyan bir fonksiyondur. Aşağıdaki gibi  yazılır.

Burada açıklama yapmam gerekecek. i ve v yerine istediğiniz herhangi bir değişken ismi gelebilir ama genelde i ve v kullanılır.

i, index’in (endeks) kısaltmasıdır. v, value’nun (değer) kısaltmasıdır. Döngüyü anlamak için, Bölüm 4’teki masayı hatırlayalım. Masada 3 cisim bulunuyordu:

ipairs, bu masadaki cisimleri şu şekilde okur:

Hatırlatma: “..” operatörü, iki string değeri birbirine bağlar. Eğer bağlamaya çalıştığı değerlerden birisi number ise, number değer string değere çevrilir. Örnek:

“hey”.. ” ” .. “sen” = “hey sen”

“hey” .. ” ” .. 1 = “hey 1″

* ” ” ifadesini iki stringin arasına boşluk koymak için kullanıyorum. Özel bir anlamı yok.

Şimdi, yukarıdakilerden yola çıkarak, bir tablodaki değerleri endeksleri ile birlikte sırasıyla panele yazan bir program yazmaya çalışınız. Sonrasında aşağıdaki örneği inceleyiniz:

Bu kod, bir sınıfın 4 öğrencisini sıralayan bir “sınıf” tablosundan öğrencileri sıraları ile panele yazar. Şunları yapar:

Döngü Başlar

i=1 v=”Miray” için   print(i..”-“..v) gerçekleşir, panele 1-Miray yazılır.

i=2 v=”Ersan” için   print(i..”-“..v) gerçekleşir, panele 2-Ersan yazılır.

i=4 v=”Selin” için   print(i..”-“..v) gerçekleşir, panele 4-Selin yazılır.

döngü biter.

Yukarıda anlatılan ipairs yineleyicisi ile for döngüsünü kullanmayı iyice anladıktan sonra alttaki b bölümüne geçiniz.

b) pairs yineleyicisi ile for döngüsü

“pairs” ingilizce çiftler anlamına gelir. ipairs’ten çok farklı değildir.Tek farkı, elemanlar ile birlikte endeks numarası değil, anahtar kelimelerini sayar. Aşağıdaki örnek, pairs yineleyicisi anlamaya yeterli olacaktır. pairs, şu şekilde yazılır:

Burada k (key), elemanın anahtar kelimesi v (value) ise değeridir. k ve v yerine istediğiniz bir değişken ismi gelebilir.

Masa örneğimizde her elemana bir anahtar vermiştik:

Bu durumda pairs yineleyicisinin sonucu:

Şimdi, bir sınıfın öğrencilerinin numaralarını bir tabloya dökelim. Öğrencilerin isimleri ise anahtar olsun.

Bunu tam ters yapmak, 124=”Miray” gibi yanlış değişken adlandırmalarına yol açacağından mümkün değildir.

Şimdi, öğrencilerin isimlerini okul numarası ile birlikte yazan bir kod yazmaya çalışınız. Sonra aşağıdaki kodu inceleyiniz.

Bu kodu yazınca fark edeceksiniz ki, tablodaki sıra ile paneldeki sıra farklıdır. pairs yineleyicisi ile yazılan k,v çiftlerinin sırası belirsizdir. Bu bazı programlarda sorun oluşturabilir, ve yukarıdaki gibi her öğrencinin sınıftaki sırasının belli olduğu bir durumda kullanımı uygun değildir. Çünkü Miray’ın numarası 124 olmakla birlikte, sınıftaki sırası da 1’dir ve tablodaki endeksi bunu yansıtır. Dolayısıyla bunun bozulmaması için, her öğrencinin bilgileri için başka bir tablo barındıran bir tablo yazmalıyız. Kulağa karışık gelse de, aşağıdaki örnekten anlaşılabilir:

*yukarıdaki kod yan yana da yazılabilirdi ancak çok uzun olurdu.

Şimdi, sınıf tablosu 4 eleman barındırır ve her bir eleman bir başka tablodur. Bu tabloların üstünden sırayla geçen bir kod yazalım:

Bu for döngüsünde her bir v, 2 elemanlı bir tablodur ve her bir elemanın da kendine ait bir anahtarı vardır. Önceki bölümleri iyice anlayan birisi, bu v tablosundan isim ve numaraları ekrana yazmanın nasıl yapılacağını eminim anlamıştır.

Yukarıdaki kod, şunları yapar:

Döngü başlar

sınıf tablosunun 1 endeksli elemanı olan {isim=Miray,numara=124} tablosunun numara anahtarlı elemanını ve sonrasında boşluk bırakarak isim anahtarlı elemanını panele yazar, dolayısıyla panele “124 Miray” yazılır.

Bunu her eleman için tekrarlar.

Döngü biter.

Şimdiye kadar anlatılanlar, lua kullanarak programlama yapmak için sağlam bir temel oluşturur. Bir sonraki bölümde birkaç yeni fonksiyon öğrenerek panele değil, ekrana yazı yazmayı öğrenmenin yanı sıra, şimdiye kadar veri türleri, tablolar ve ve döngüler hakkında öğrendiklerimizin tümünü kullanarak, sıfırdan RPG oyunu tarzında bir envanter sistemi oluşturacağız. Bunu kendiniz yapabileceğizi düşünüyorsanız, en iyi envanter sistemi kodlarınızı bana twitter aracılığıyla (@tulanDenizcan) ulaştırmanız durumunda bir sonraki yazımda birinciyi belirleyerek yazının başında ona yer veririm 🙂

Şimdiye kadar öğrendiklerimizi iyice anlayarak ve uygulayarak çalışınız. Bundan sonra gelen derslerde yavaş yavaş tam bir oyun yapmaya doğru ilerleyeceğiz.

2
like
1
love
0
haha
0
wow
0
sad
0
angry
2 Yorum konuları
0 Konu cevapları
0 İzleyiciler
 
En çok tepki verilen yorum
En yeni yorumlar
2 Yorum yazarları
mustafaÇalı Kuşu Son yorum yazarları
  Abone ol  
En Yeniler Eskiler Beğenilenler
Bildir
mustafa
Üye

Güzel bir içerik serisi tebrik ederim

Çalı Kuşu
Yazar

Ülkemizde gelecek adına ciddi bir öğrenim alanı olduğu kuşkusuz…