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.