Iota Go’nun artan değerli sabitlerde kullandığı bir yaklaşım (Ama Go’ya özel değil) , 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.

Anlamak için basit bir IOTA kullanımı ile başlayalım

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

Bu şekilde tanımladığınız bir değişkende Sunday = 0, Monday =1 ….. Satuday =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 tipinde bir değişken 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ğerlerde 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.

Iota tanımı içindeki boş satırlar veya yorum satırları iota değerini arttırmaz. Eğer atlamak istediğiniz değerler varsa alt çizgi _ operatörünü kullanabilirsiniz.

const (
    _ int = iota    // 0 değerini atladık
    Sales           // 1
    Accounting      // 2
    _               // Üçü atladık
    _               // Dördü atladık

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

    // Bu yorum satırı iotayı arttırmaz
    Finance         // 6
)

IOTA’yı bitwise shift işlemleri için de kullanabilirsiniz.

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 kaydıracaktır.

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, expenseive1 = 2
    cheap2, expsenvie2                    // cheap2 = 2, expenseive1 = 3
    cheap3, _                             // cheap3 = 3
)

Iota değerini sıfırlamak için yeni bir const grubu kullanmanı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
)

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.