[Quest || Lua] - For Döngüsü Kullanımı

ggns7

MT Üye
MT Üye
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ı
Lua (Quest):
Genişlet Daralt Kopyala
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):
Genişlet Daralt Kopyala
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):
Genişlet Daralt Kopyala
for i = 10, 1, -1
do
    print(i)
end

Çıktı:
10
9
8
7
6
5
4
3
2
1
Lua (Quest):
Genişlet Daralt Kopyala
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):
Genişlet Daralt Kopyala
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):
Genişlet Daralt Kopyala
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:
bu foru çok duyuyorum adam sistem paylaşıyor neden for kullanmadın diyolar.
 
Geri
Üst