Ana içeriğe geç

Enum

Sabit Değerler Kümesi

Türkçe karşılığı
numaralandırma
Okunuşu
inım ya da inum

Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/enum

Kısaca

Enum, bir siparişin olası durumları gibi sabit ve adlandırılmış bir değerler kümesi tanımlayan bir veri türüdür; kod bu kümenin dışında bir değer kullanamaz.

Enum nedir?

Enum, yani enumerated type (sayım türü), olası değerleri küçük ve sabit bir adlandırılmış sabitler listesi olan bir türdür. Bir siparişin durumunu her şeyi tutabilecek gevşek bir dize ya da sayı olarak saklamak yerine, tam olarak Pending, Shipped ve Delivered değerlerine sahip OrderStatus tanımlarsınız ve derleyici bunun dışındaki her şeyi reddeder. Color.Red gibi adlar da kodu, çıplak bir 2 değerine kıyasla kendini belgeleyen hâle getirir.

Enum'lar diller arasında çok farklılık gösterir. C'de enum üyeleri yalnızca adlandırılmış tamsayılardır, bu yüzden sıradan sayılarla karıştırılabilir. Java enum'ları alanları ve metotları olabilen tam birer sınıftır; Rust ve Swift ise her varyantın kendi verisini taşımasına izin vererek enum'ları fonksiyonel dillerin cebirsel veri türleri (algebraic data types) ya da etiketli birleşimler (tagged unions) dediği şeye dönüştürür. TypeScript'te enum anahtar sözcüğü vardır, ancak birçok ekip derlemeden sonra ortadan kaybolan "pending" | "shipped" gibi bir dize değişmezleri birleşimini tercih eder.

Enum, serbest metin kutusundan çok bir çoktan seçmeli soru gibi çalışır: yanıt listelenen seçeneklerden biri olmalıdır, bu yüzden yazım hataları ve geçersiz değerler erken yakalanır. Enum'lar doğal olarak switch ya da match deyimleriyle eşleşir; Rust ve Swift gibi dillerde bir durum ele alınmadığında derleyici derlemeyi reddeder, dolayısıyla yeni bir değer eklemek güncellenmesi gereken her yeri ortaya çıkarır.

Enum'lar bazen düz sabitlerle karıştırılır. const RED = 0 gibi bir sabit grubu değerlere ad verir ama tür güvenliği sağlamaz, çünkü renk beklenen yere hâlâ herhangi bir sayı aktarılabilir. Enum ise kümenin kendisini bir tür yapar; böylece Color alan bir fonksiyon yalnızca üyelerinden birini alabilir.

Önemli noktalar

  • Enum, sabit bir adlandırılmış değerler kümesine sahip bir türdür.
  • Geçersiz değerleri önler ve sihirli sayılardan ya da dizelerden daha okunaklıdır.
  • C'de enum'lar adlandırılmış tamsayılardır; Java, Rust ve Swift'te metot ya da veri taşıyabilirler.
  • Kapsamlı match veya switch denetimleri, yeni bir değer eklendiğinde eksik durumları yakalar.

Örnek

TypeScript'te dize tabanlı bir enumtypescript
enum OrderStatus {
  Pending = "PENDING",
  Shipped = "SHIPPED",
  Delivered = "DELIVERED",
}

function label(status: OrderStatus): string {
  switch (status) {
    case OrderStatus.Pending: return "Waiting to ship";
    case OrderStatus.Shipped: return "On the way";
    case OrderStatus.Delivered: return "Arrived";
  }
}

label(OrderStatus.Shipped); // "On the way", while label("LOST") won't compile

Sık sorulan sorular

Dizeler yerine ne zaman enum kullanmalıyım?

Bir değerin durumlar, roller ya da yönler gibi küçük ve bilinen bir kümeden biri olması gerektiğinde enum kullanın. Yazım hatalarını derleme zamanında yakalar ve editörlerin seçenekleri otomatik tamamlamasını sağlar; serbest biçimli dizeler ise her şeyi kabul eder.

TypeScript'te enum kullanmalı mıyım?

TypeScript enum'ları da, dize değişmezi birleşimleri de işe yarar. Enum'lar çalışma zamanında gerçek bir JavaScript nesnesi üretir; "admin" | "user" gibi bir birleşim ise yalnızca derleme zamanında vardır, bu yüzden birçok kod tabanı basit durumlarda birleşimleri tercih eder.

Enum'ların metotları olabilir mi?

Bazı dillerde evet. Java, Kotlin, Swift ve Rust enum'ların metot tanımlamasına izin verir; Rust ve Swift enum'ları ayrıca her varyantta farklı veri taşıyabilir. C enum'u ise yalnızca adlandırılmış tamsayı sabitleri kümesidir.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar