Teknik Detaylar

Go'da iota Nedir? iota Ne Zaman ve Nerede Kullanılır?

← Teknik Detaylar
2021-10-04 ~ 2026-06-21 · 4 dk okuma
Go'da iota Nedir? iota Ne Zaman ve Nerede Kullanılır?
Bu yazıyı yapay zekâ ile tartış
Sayfayı kopyala

💡 Özet (TL;DR):

  • Nedir: Go dilinde const (sabit) blokları içinde kullanılan ve her satırda sıfırdan başlayarak otomatik olarak artan (0, 1, 2...) özel bir tamsayı sayacıdır (constant generator).
  • Kritik Kural: Sıralama önemlidir. Sabitlerin sırası değişirse aldıkları değerler de değişir. Boş tanımlayıcı (_) kullanılarak istenen değerler atlanabilir.
  • Gelişmiş Kullanım: Bit kaydırma (bitwise shift - maskeleme), özel matematiksel formüllerle geriye sayım veya eşli grup tanımlamalarında kullanılabilir.

iota, Go'nun artan değerli sabitlerde kullandığı bir yaklaşım (ama Go'ya özel değil) olan tamsayı sayacıdır. Bu yazıda iota nedir ve nerelerde kullanılır örneklerle inceleyeceğiz.

İnanç Gümüş tarafından yazılmış Ultimate Visual Guide to Go Enums and iota başlıklı yazıda Go'da enum ve iota kullanımı ile ilgili çok daha ayrıntılı bilgi edinebilirsiniz.


Go'da Sık Kullanılan iota Kalıpları ve Formülleri

Formül / KalıpÖrnek TanımSabitlerin Aldığı DeğerlerKullanım Amacı
VarsayılanA = iotaA=0, B=1, C=2Sıralı enum benzeri kimlikler oluşturmak.
Ofset EklemeA = iota + 1A=1, B=2, C=3Sıfırdan başlamak istemediğimiz durumlar.
Bit KaydırmaA = 1 << iotaA=1, B=2, C=4Yetki veya bayrak (flag) maskeleri oluşturmak.
Boş Tanımlayıcı_ = iotaA=1 (0 atlandı)Belirli değerleri veya varsayılan 0'ı es geçmek.
Formül (Geriye)A = 10 - iotaA=10, B=9, C=8Sabit değerleri geriye doğru saydırmak.

1. Basit iota Kullanımı

Anlamak için en basit iota kullanımı ile başlayalım:

const (
    Sunday  int = iota
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
)

Bu şekilde tanımladığınız bir const grubunda Sunday = 0, Monday = 1 ... Saturday = 6 değerleri bu sabitlere otomatik olarak atanacaktır.

Kaynak toplamaya dayalı bir oyun yapıyorsanız ve kaynak tiplerini bir sabitte belirlemek isterseniz aşağıdaki gibi iota içeren sabitler kullanabilirsiniz:

const (
    Wood  int = iota
    Metal
    Gold
)

Bu şekilde tanımladığımız bir sabitte, Wood başlangıç değeri olan 0'ı alırken, Metal 1, Gold ise 2 değerini otomatik olarak alacaktır.

⚠️ DİKKAT: Sıralama önemlidir. Günün birinde bu sabitler böyle güzel görünmüyor, ben bunları alfabetik yapayım derseniz sabitlerin aldığı değerler de buna göre değişecektir:

const (
    Metal  int = iota
    Gold
    Wood
)

Bu tanımda Metal 0, Gold 1, Wood ise 2 değerini alır ve kayıtlı bir oyunu geri yüklediğinizde bütün kaynakların değerleri yer değiştirmiş olarak karşınıza çıkacaktır. Bu açıdan iota'yı dikkatli kullanmalısınız.


2. Boş Tanımlayıcı (Blank Identifier) ile Değer Atlamak

iota tanımı içindeki boş satırlar veya yorum satırları iota değerini artırmaz. Eğer atlamak istediğiniz değerler varsa boş tanımlayıcı _ kullanabilirsiniz:

const (
    _ int = iota    // 0 değerini atladık
    Sales           // 1
    Accounting      // 2
    _               // 3'ü atladık
    _               // 4'ü atladık

    // Bu yorum satırı da, üstteki ve alttaki boş satırlar da iota'yı artırmaz.
    
    CustomerSupport // 5

    // Bu yorum satırı iota'yı artırmaz
    Finance         // 6
)

3. Bit Kaydırma (Bitwise Shift) İşlemleri

iota'yı bit kaydırma (bitwise shift) işlemleri için de kullanabilirsiniz. Bu, özellikle yetki maskelemelerinde çok işe yarar:

const (
    addUser = 1 << iota // 0000001 = 1
    editUser            // 0000010 = 2
    deleteUser          // 0000100 = 4

    adminRights = addUser | editUser | deleteUser   // 7
)

Yukarıdaki örnekte iota her satırda otomatik olarak bir bit sola kaydıracaktır.


4. Eşli Sabit Grupları Tanımlamak

Sabitleri eşleştirerek her bir eş grubu için farklı bir iota tanımı yapabilirsiniz:

const (
    cheap1, expensive1 = iota + 1, iota + 2 // cheap1 = 1, expensive1 = 2
    cheap2, expensive2                      // cheap2 = 2, expensive2 = 3
    cheap3, _                               // cheap3 = 3
)

5. iota Değerini Sıfırlamak

iota değerini sıfırlamak için yeni bir const grubu açmanız yeterlidir. Tersten baktığımızda, iota'nın sıfırlanmasını istemiyorsanız işinizi tek bir const grubu içinde bitirmelisiniz:

const (
    Wood  int = iota   // Wood = 0
    Metal              // Metal = 1
    Gold               // Gold = 2
)

const (
    Sunday int = iota    // Sunday = 0
    Monday               // Monday = 1
)

const (
    Test int = iota      // Test = 0
)

6. Geriye Doğru Saydırma Formülleri

Dolaylı bir yöntemle iota değerini geriye saymak için de kullanabilirsiniz:

const (
    max = 10
)

const (
    a = (max - iota) // 10
    b                // 9
    c                // 8
)

iota temel olarak sabit tanımlarında kullanacağımız bir sayaç görevi görüyor ve akıllı bir kullanımla işleri çok kolaylaştırıyor.

Aklınıza gelen farklı kullanım yöntemleri varsa yorumlara bırakabilirsiniz.

Kapak Fotoğrafı: Bich Tran


Bu Yazıda Yapılan Değişiklikler
  • 11.05.2022: Yazı özeti düzenlendi.
  • 21.06.2026: "iota" kelimeleri küçük harfe çekilerek standardize edildi, imla ve yazım hataları (Saturday, değerler de, artırmaz vb.) düzeltildi. "alt çizgi" yerine "boş tanımlayıcı (blank identifier)" gibi teknik terimler güncellendi, TL;DR özet ve iota formül tablosu eklendi.