- Mesaj
- 296
- Çözümler
- 13
- Beğeni
- 130
- Puan
- 519
- Ticaret Puanı
- 0
Selamlar, bu başlık altında Lua dilinde For döngüsünün kullanımına değinmek istiyorum. Şimdilik 2 farklı kullanımı gösteriyorum, daha sonra fonksiyonlarla ve diğer veri yapılarıyla kullanımından bahsedeceğim.
For Döngüsü Yapısı || Yazım Kuralı
degisken ----> For döngüsü'nün bir değer üzerinde iterasyon(tekrarlamak) işlemi yapabilmesi gerekir. Bu işi yapabilmesi için de döngüyü tanımladığımız satırda bir değişken oluşturmamız gerekiyor ki kendini ne kadar tekrarlayacağını bilsin. degisken, döngü bittiğinde yok edilir.
ilk_deger ----> For döngüsünün kaç kere tekrar edeceğini belirlemek için oluşturduğumuz değişkene bir başlangıç değeri vermemiz gerek.
min/max ----> Bu integer (tam sayı) değeri ise döngü için oluşturduğumuz değişkenin en fazla veya en az kaç olabileceğini belirler.
Ekstra olarak, min/max değerinden sonra virgül koyup degisken değerini azaltabiliriz, fakat artıramayız. Örneğin -1 yazabiliriz ama +1 yazamayız.
Neden? Birazdan açıklayacağım.
Temel kullanımına örnek:
Şimdi gelelim yukarıda bahsettiğim değer artırma-azaltma sorusuna:
*** For döngüsü için oluşturulan değişkenin değeri default olarak her zaman artar.
Bu yüzden min/max değerinden sonra virgül konulup sonrasında +1 gibi bir aritmetik işlem yaptırmaya çalışırsanız hata alacaksınız. Çünkü bu zaten varsayılan işlem.
Örnekle açıklayayım:
Şimdi de table veri yapısıyla kullanımına örnek verelim:
table veri yapısı içerisinde 2 değer tutar. Birincisi anahtar, ikincisi ise karsilik_gelen_deger. Diğer veri tiplerinden farklı olarak içerisinde 2 değer tuttuğundan dolayı o değerlere döngü aracılığıyla ulaşmak istersek, kullanmamız gereken aracı fonksiyonlar var. Bunlar, ipairs() ve pairs()
Bu iki fonksiyon bize table nesnesinden anahtar=deger (key, value) çiftini döndürürler.
Aralarındaki farka gelecek olursak;
ipairs() sadece tam sayı olan anahtarları dikkate alır.
pairs() tüm anahtarları dikkate alır fakat önce tam sayı olan anahtarları daha sonra alfabetik olan anahtarları çeker.
Bir örnek verelim;
Daha sonra fonksiyonlarla ve diğer veri yapılarıyla beraber kullanımını ekleyeceğim. Şimdilik en çok kullanacağınız 2 kullanıma değindim.
For Döngüsü Yapısı || Yazım Kuralı
Lua (Quest):
for degisken = ilk_deger, min/max, degeri_azalt:
-- bir şeyler, bir şeyler
end
degisken ----> For döngüsü'nün bir değer üzerinde iterasyon(tekrarlamak) işlemi yapabilmesi gerekir. Bu işi yapabilmesi için de döngüyü tanımladığımız satırda bir değişken oluşturmamız gerekiyor ki kendini ne kadar tekrarlayacağını bilsin. degisken, döngü bittiğinde yok edilir.
ilk_deger ----> For döngüsünün kaç kere tekrar edeceğini belirlemek için oluşturduğumuz değişkene bir başlangıç değeri vermemiz gerek.
min/max ----> Bu integer (tam sayı) değeri ise döngü için oluşturduğumuz değişkenin en fazla veya en az kaç olabileceğini belirler.
Ekstra olarak, min/max değerinden sonra virgül koyup degisken değerini azaltabiliriz, fakat artıramayız. Örneğin -1 yazabiliriz ama +1 yazamayız.
Neden? Birazdan açıklayacağım.
Temel kullanımına örnek:
Lua (Quest):
for i = 1, 3
do
print("Merhaba, sevgili forum üyeleri")
end
Çıktı:
Merhaba, sevgili forum üyeleri
Merhaba, sevgili forum üyeleri
Merhaba, sevgili forum üyeleri
Şimdi gelelim yukarıda bahsettiğim değer artırma-azaltma sorusuna:
*** For döngüsü için oluşturulan değişkenin değeri default olarak her zaman artar.
Bu yüzden min/max değerinden sonra virgül konulup sonrasında +1 gibi bir aritmetik işlem yaptırmaya çalışırsanız hata alacaksınız. Çünkü bu zaten varsayılan işlem.
Örnekle açıklayayım:
Lua (Quest):
for i = 10, 1, -1
do
print(i)
end
Çıktı:
10
9
8
7
6
5
4
3
2
1
Lua (Quest):
for i = 10, 1, +1
do
print(i)
end
Çıktı:
lua: main.lua:1: unexpected symbol near '+'
Şimdi de table veri yapısıyla kullanımına örnek verelim:
Lua (Quest):
meyveler = {"Elma", "Armut", "Muz"}
for anahtar, deger in ipairs(meyveler)
do
print(string.format("%s Sıradaki meyve: %s", anahtar, deger))
end
Çıktı:
1. Sıradaki meyve: Elma
2. Sıradaki meyve: Armut
3. Sıradaki meyve: Muz
table veri yapısı içerisinde 2 değer tutar. Birincisi anahtar, ikincisi ise karsilik_gelen_deger. Diğer veri tiplerinden farklı olarak içerisinde 2 değer tuttuğundan dolayı o değerlere döngü aracılığıyla ulaşmak istersek, kullanmamız gereken aracı fonksiyonlar var. Bunlar, ipairs() ve pairs()
Bu iki fonksiyon bize table nesnesinden anahtar=deger (key, value) çiftini döndürürler.
Aralarındaki farka gelecek olursak;
ipairs() sadece tam sayı olan anahtarları dikkate alır.
pairs() tüm anahtarları dikkate alır fakat önce tam sayı olan anahtarları daha sonra alfabetik olan anahtarları çeker.
Bir örnek verelim;
Lua (Quest):
tablo = {}
tablo[1]="a"
tablo[3]="b"
tablo[2]="c"
tablo[4]="d"
tablo["aa"] = "zz"
tablo[7] = "e"
for anahtar,deger in ipairs(tablo) do print(anahtar,deger) end
print("---")
for anahtar,deger in pairs(tablo) do print(anahtar,deger) end
Çıktı:
1 a
2 c
3 b
4 1
---
1 a
2 c
3 b
4 1
7 e
aa zz
Daha sonra fonksiyonlarla ve diğer veri yapılarıyla beraber kullanımını ekleyeceğim. Şimdilik en çok kullanacağınız 2 kullanıma değindim.
Son düzenleme: