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.
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ı
matchveyaswitchdenetimleri, yeni bir değer eklendiğinde eksik durumları yakalar.
Örnek
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 compileSı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
- Veri türüProgramlamanın Temelleri, s. 54Veri türü, bir programa bir verinin sayı ya da metin gibi hangi tür bir değer taşıdığını ve hangi işlemlerin ona uygulanabileceğini söyleyen sınıflandırmadır.
- TypeScriptWeb Geliştirme, s. 51TypeScript, JavaScript üzerine statik tipler ekleyerek birçok hatayı kod çalışmadan yakalayan ve düz JavaScript'e derlenen bir programlama dilidir.
- JavaProgramlama Dilleri, s. 15Java, Java Sanal Makinesi için bayt koda derlenen, statik tipli ve nesne yönelimli bir programlama dilidir; programlar birçok platformda çalışabilir.
- RustProgramlama Dilleri, s. 29Rust, sahiplik kurallarını derleme zamanında denetleyerek çöp toplayıcı olmadan bellek güvenliği sağlayan, derlenen ve statik tipli bir sistem dilidir.
- SwiftProgramlama Dilleri, s. 31Swift, güvenlik ve hız için tasarlanmış, derlenen ve statik tipli bir dildir; çoğunlukla Apple platformları için uygulama geliştirmede kullanılır.
- SınıfProgramlamanın Temelleri, s. 49Sınıf, nesne yönelimli programlamada bir grup nesnenin paylaştığı veri ve davranışı tanımlayan, nesnelerin örnek olarak ondan oluşturulduğu bir plandır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin