Go’da Karar Vermek ve Dönmek: if-else ile for Döngüsünün Akış Yönetimi

Bir programı ilginç yapan şey yalnızca komutları sırayla çalıştırması değil, koşullara göre karar verebilmesi ve gerektiğinde aynı işi tekrar tekrar yapabilmesidir. Go dilinde bu akış yönetiminin iki ana kahramanı vardır: karar almak için if-else, tekrar etmek için ise neredeyse her role bürünen for döngüsü. ``

Akış yönetimi neden önemlidir?

Bilgisayar programını küçük bir karar makinesi gibi düşünebiliriz. Elimizde bir durum, yani değişkenler vardır; program bu durumlara bakar ve hangi yoldan ilerleyeceğine karar verir. Matematiksel olarak bir koşul çoğu zaman şu mantıksal ifadeye benzer:

$sonuc = (yas \ge 18) \land (puan > 50)$

Burada ifade true ise bir blok, false ise başka bir blok çalışır. Go’da koşullar parantez içine alınmaz; bu, dilin sade ve okunabilir olma tercihidir.

package main

import "fmt"

func main() {
    puan := 72

    if puan >= 85 {
        fmt.Println("Harika!")
    } else if puan >= 50 {
        fmt.Println("Geçtin, ama kahveye devam.")
    } else {
        fmt.Println("Tekrar deneme zamanı.")
    }
}

Bu örnekte program, puan değerine göre yalnızca bir yolu seçer. if ilk doğru koşulu yakaladığında devamındaki else if bloklarına bakmaz. Yani akış, gereksiz kontrol yapmadan ilerler.

Yapı Ne zaman kullanılır? Go’daki not
if Tek bir koşul kontrol edilecekse Koşul parantezsiz yazılır
else if Birden fazla alternatif varsa Sıralama önemlidir
else Hiçbir koşul sağlanmazsa Varsayılan yol gibidir

if içinde kısa değişken tanımlama

Go’nun tatlı özelliklerinden biri, if satırında küçük bir hazırlık yapabilmektir. Bu özellikle hata kontrolünde çok görülür.

package main

import "fmt"

func main() {
    if sayi := 42; sayi%2 == 0 {
        fmt.Println("Çift sayı:", sayi)
    } else {
        fmt.Println("Tek sayı:", sayi)
    }
}

Burada sayi yalnızca if-else bloğunun içinde yaşar. Bu sayede değişkenin kapsamı dar tutulur. Daha az kapsam, daha az kafa karışıklığı demektir.

Go’da tek döngü: for

Go’da while veya do-while anahtar kelimeleri yoktur. İlk bakışta eksiklik gibi görünür, ama for o kadar esnektir ki hepsinin görevini üstlenir. Klasik kullanım üç parçadan oluşur:

$baslangic \rightarrow kosul \rightarrow guncelleme$

package main

import "fmt"

func main() {
    toplam := 0

    for i := 1; i <= 5; i++ {
        toplam += i
    }

    fmt.Println("Toplam:", toplam)
}

Bu kodda i değeri 1’den 5’e kadar ilerler ve toplam hesaplanır. Döngünün çalışma maliyetini kabaca $O(n)$ olarak düşünebiliriz; çünkü tekrar sayısı, veri boyutu ile doğru orantılıdır.

Döngü biçimi Örnek Benzer olduğu yapı
Klasik for for i := 0; i < n; i++ C tarzı döngü
Koşullu for for x < 10 while
Sonsuz for for {} Sonsuz döngü
range ile for for i, v := range liste Koleksiyon gezme

while gibi for kullanımı

Go’da sadece koşul yazarak while benzeri bir döngü oluşturabiliriz.

package main

import "fmt"

func main() {
    enerji := 3

    for enerji > 0 {
        fmt.Println("Kod yazılıyor... enerji:", enerji)
        enerji--
    }

    fmt.Println("Mola zamanı!")
}

Bu tarz, koşulun ne zaman bozulacağını dışarıdan kontrol etmek istediğimiz durumlarda okunaklıdır.

range ile koleksiyon gezmek

Diziler, dilimler, map’ler ve string’ler üzerinde dolaşmak için range kullanılır.

package main

import "fmt"

func main() {
    diller := []string{"Go", "Python", "Rust"}

    for indeks, dil := range diller {
        fmt.Println(indeks, dil)
    }
}

range, her turda indeks ve değeri verir. Eğer indekse ihtiyacımız yoksa _ ile görmezden gelebiliriz. Bu, Go’nun açık niyetli kod yazma felsefesine uygundur.

break ve continue: döngünün trafik levhaları

break döngüyü tamamen bitirir, continue ise mevcut turu atlayıp sonraki tura geçer.

for i := 1; i <= 10; i++ {
    if i == 7 {
        break
    }
    if i%2 == 0 {
        continue
    }
    fmt.Println(i)
}

Bu kod 7’ye gelince durur, çift sayıları ise yazdırmadan geçer. Yani çıktı yalnızca 1, 3 ve 5 olur.

Özetle Go’da akış yönetimi sade ama güçlüdür. if-else programın karar mekanizmasını kurar; for ise tekrar eden işleri tek bir esnek yapı altında toplar. Bu iki aracı iyi kavramak, Go’da okunabilir ve kontrollü programlar yazmanın temelidir.

Yorumlar