Enumeration nedir ?

C / C++ gibi başka programlama dillerinde de bulunan Enumeration Java’ya 1.5 sürümünde kazandırılmıştır. Enum, enumeration(numaralandırma) olarak da adlandırılır, alanları sabit bir sabitler kümesinden oluşan java.lang.Enum dan türeyen özel sınıf türüdür. Enum’un amacı derleme zamanında(compile time) tip güvenliğini(type safety) sağlamaktır.

Örneğin, haftanın günlerinin basit enum’u yapalım.

Enum’ların Yapısı

EnumGun diye oluşturduğumuz enum derlendikten sonra aslında şu şekilde olacaktır :

Özel tip olan enum’un aslında Singleton sınıftan farkı olmadığını gördünüz. Kod içerisinde önemli olan yerleri koyu renkle işaretledim. Bu işaretlediklerimden yola çıkarak ;

  • Tüm enumlar gizlice java.lang.Enum sınıfından türer. Java’da bir sınıfın yalnızca bir ebeveyni olabildiğinden, bir enum başka birşeyden türeyemez.
  • Enum’lar herhangi bir sınıfın üst sınıfı olamaz.
  • new anahtar kelimesi ile Enum nesneleri oluşturulamaz.
  • Enum’lar yapılandırıcılara, bloklara ve statik bloklara, değişkenlere ve metotlara sahip olabilir.
  • Enum’lar interface’leri implement edebilir.

Enumdaki sabitlerimize başka değerlerde verebiliriz. Bunun için yapılandırıcıyı(constructor) değiştirmek yeterlidir.

Tüm enum’lar java.lang.Enum soyut sınıfından türediğini söylemiştik. Bu sayede üst sınıftan bir takım özellikleri almaktadır. name(), ordinal(), valueOf() bunların yanında Comparable ve Serializable özelliklerinide barındırmaktadır.

Örnek ile açıklayalım.

Enum Koleksiyonları(Collections) – EnumSet ve EnumMap

Java 1.5 ile beraber java.util paketine enumları destekleyen iki tane koleksiyon geldi. Bunlar EnumSet ve EnumMap

EnumSet

EnumMap

Sonuç olarak …

İçinde bulunduğum projelerde enumlar yerine bir dizi önceden tanımlanmış değeri temsil eden çok sayıda sabit görüyorum. Bunu, enumlara aşina olmayan deneyimsiz programcılara atfediyorum.

Database’de verilere baktığımızda 1, 0 gibi sayılar görüyoruz ve ne anlama geldiklerini koddan araştırıp buluyoruz. Enumlar bu “sihirli numaraları” kaldırır. Bunlar, gerçekten kendi başına bir şey ifade etmeyen sayılardır. Bu sayıları gerçek değerlerle değiştirirseniz, kodunuz daha anlamlı olur.

Ayrıca, enumlar, yanlış değerlerin bir işleve iletilmesini engeller. Yöntemin girdi olarak aldığı değerleri kısıtlamak istiyorsanız, ideal olarak enumları kullanmalısınız. Varsayalım ki, bit metot yazdınız ve bunu diğer yazılımcı arkadaşlarınızla paylaşacaksınız. Bu metodunuz parametre olarak haftanın gününü alacaktır ve içeride bir takım gün kontrolleri yapıp ekrana birşeyler yapacaktır. Bu parametreyi String olarak belirlerseniz bu metodu kullanacak kişi nasıl kullanacağı konusunda endişeye düşecektir. O metoda parametre geçerken İngilizce olarak mı günleri  göndermeliyim, Türkçe olarak mı göndermeliyim yoksa kısaltma olarak mı göndermeliyim diye düşünüp duracaktır ve sonrasında yazdığınız metoda bakmak zorunda kalacaktır. Eğer yukarıdaki enum’u metodumuza parametre olarak istiyor olsaydık kullanacak kişi korkusuzca metodunuzu çağırabilecekti.

Beğenebileceğiniz Diğer Yazılar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir