CodeBlanks Logo Icon CodeBlanks

range ile iterasyon

range ile slice ve map üzerinde döngüyü öğrenirsin.

range ile iterasyon

range dilim, dizi, map, string ve kanallar üzerinde gezinir. Dilimlerde her turda dizin ve değer verir:

meyveler := []string{"elma", "armut", "kiraz"}
for i, m := range meyveler {
    fmt.Println(i, m)
}
for _, m := range meyveler {   // yalnızca değer
    fmt.Println(m)
}

Go 1.22'den itibaren for i := range 5 ile 0'dan 4'e kadar da sayılabilir.

Map ve string üzerinde range

Map'te range anahtar ve değer verir; sıra rastgeledir ve her çalıştırmada değişebilir. String'de ise bayt dizini ve rune verir:

stok := map[string]int{"kalem": 3, "defter": 5}
for ad, adet := range stok {
    fmt.Println(ad, adet)
}
for i, r := range "çay" {
    fmt.Println(i, string(r))  // 0 ç, 2 a, 3 y
}

Sıralı çıktı gerekiyorsa map anahtarları önce bir dilime alınıp sıralanır.

Uygulama Dilimi ikiye katla

s := []int{1, 2, 3} tanımla. for i := range s döngüsüyle her elemanı yerinde iki katına çıkar ve dilimi yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

func main() {
    s := []int{1, 2, 3}
    for i := range s {
        s[i] *= 2
    }
    fmt.Println(s)
}

Beklenen çıktı

[2 4 6]

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>for _, v := range s { v *= 2 }</code> dilimi değiştirir mi?

  • Evet, tüm elemanlar iki katına çıkar
  • Yalnızca ilk eleman değişir
  • Derlenmez
  • Hayır; v elemanın kopyasıdır Doğru cevap

Açıklama: Dilimi değiştirmek için dizinle yazılır: for i := range s { s[i] *= 2 }.

2 Dizini atla

Soru
for ____, m := range meyveler {
    fmt.Println(m)
}
Cevap
for _, m := range meyveler {
    fmt.Println(m)
}

Açıklama: _ kullanılmayan dizini yok sayar.

3 range hedefi

Kavram Anlamı
[]string dizin, değer
map[K]V anahtar, değer
string bayt dizini, rune
range 5 0..4

Başlangıç bölümündeki tüm dersler