Erhan Yakut Software Developer @Binalyze | Founder @Passwall | Golang Enthusiast | Open Sorcerer

Go Programlama Dili (Golang) For Döngüleri

2 min read

Go Programlama Dili For Döngüsü



Go Programlama Dili (Golang)‘nin temel felsefesi gereksiz tüm kod yapılarından arındırılmış basit bir programlama dili olmak. Bu düşüncenin en önemli yansımalarını da döngülerde görüyoruz. Aslında “döngü” demem gerekir çünkü bu dilde yalnızca for döngüsü bulunmakta. Hani o diğer dillerde gördüğünüz while, foreach benzeri yapılar Go‘da yerini for‘a bırakmış durumda. Go ile veritabanı işlemlerinde de sıkça kullanılan for döngüsünün normal bir for olmadığını da belirtmem lazım. Zaten yazıyı yazmamın sebebi de bu. Detayları yazının devamında, yazıda belirtilen kodların derli toplu halini ise projenin github sayfasında bulabilirsiniz.

1. Belirli Sayıda Çalışan For Döngüsü

Eğer projede döngünün kaç defa çalışacağını net olarak belirteceksek aşağıdaki örneği kullanabiliriz. Bu örnekte döngü değişkeni (i), 5’ten küçük olduğu sürece döngü çalışır.

package main

import "fmt"

func main() {

	for i := 0; i < 5; i++ {
		fmt.Println(i)
	}

}

/* Çıktı
0
1
2
3
4
*/

Bu döngü yapısında 5 rakamı yerine len(array) gibi bir kullanım ile herhangi bir dizi değişkenin boyutu kadar döngüyü devam ettirebilirsiniz. Ancak diziler için aşağıda anlatacağım range kullanımı daha sağlıklıdır.

2. Azalarak Çalışan For Döngüsü

Aslında bu kullanımın bir üstteki kullanımdan bir farkı yok. Sadece i değişkeninin değerinin azalarak da kullanılabildiğini göstermek istedim.

package main

import "fmt"

func main() {

	// Azalan döngü
	for i := 4; i >= 0; i-- {
		fmt.Println(i)
	}

}

/* Çıktı
4
3
2
1
0
*/

3. While Yerine Kullanılabilen For Döngüsü

Go Programlama Dili'nde while bulunmamaktadır. Bu açığı ise yine for ile güzel bir şekilde kapatmışlar. While yerine kullanabileceğiniz for döngüsü örneği aşağıdaki gibidir.

package main

import "fmt"

func main() {

	valid 	:= true
	n := 0

	// Döngü "valid" true olduğu sürece devam eder
	for valid {

		// Eğer i 3'e eşit ise "valid"i false yap
		if n == 3 {
			valid = false
		}
		fmt.Println(n)
		n++
	}

}

/* Çıktı
0
1
2
3
*/

4. Koşulsuz/Sonsuz Döngü

Golang'deki for döngüsünü hiçbir koşul kullanmadan da çalıştırabilirsiniz. Böyle bir durumda döngü sonsuz kere çalışacaktır. Döngüyü durdurmak için ise break kullanabilirsiniz. Tabi bu kullanımda her ne kadar for'un yanında bir koşul kullanmamış olsak da döngü içinde döngünün duracağı/kırılacağı noktayı belirtmek için mecburen bir koşul kullanmak zorundayız.

package main

import "fmt"

func main() {
	id := 1

	// Bu döngü break ile durdurulmadığı sürece sonsuz kere döner.
	for {
		if id == 8 {
			break
		}
		fmt.Println(id)
		id += 1
	}
}

/* Çıktı
1
2
3
4
5
6
7
*/

5. Dizi (Array)'deki İndeks Sayısı Kadar Döngüyü Çalıştırma

Bir dizi (array) veya slice'taki indeks sayısı kadar döngüyü çalıştırmak ve dizinin değerlerini göstermek isterseniz aşağıdaki yapıyı kullanabilirsiniz.

package main

import "fmt"

func main() {

	// 4 rakam bulunan bir dizi (array)
	myArray := []int{5, 10, 15, 20}

	// Dizideki indeks sayısı kadar döngüyü çalıştır
	for i := range myArray {
		fmt.Println(myArray[i])
	}
}

/* Çıktı
5
10
15
20
*/

6. Foreach Yerine Kullanılabilen For Döngüsü

Go Programlama Dili'nde while gibi foreach'e de yer verilmemiş. Onun yerine yine for döngüsünü aşağıdaki örnekte olduğu gibi kullanabiliyoruz.

package main

import "fmt"

func main() {

	// üç hayvan isminden oluşan bir dizi
	animals := []string{"kedi", "köpek", "kuş"}

	// Dizideki indeks sayısı kadar döngüyü çalıştır
	for _, animal := range animals {
		fmt.Println(animal)
	}
}

/* Çıktı
kedi
köpek
kuş
*/

Bu kullanımın bir üst maddedeki normal range'ten farkı, burada dizideki indeksin sıra numarasının _ (alt çizgi) ile ihmal edilmesi. Yani burada bizi ilgilendiren şey sadece dizideki elamanlardır, elemanların sırası değil.

Son Sözler

Bu yazıda Go Programlama Dili'nde oldukça farklı şekillderde kullanılabilen for döngüsünü anlattım. Faydalı olması dileğiyle ;)



Erhan Yakut Software Developer @Binalyze | Founder @Passwall | Golang Enthusiast | Open Sorcerer