Enum ya da enumaration sabit değerleri yönetmek için geliştirilmiş bir yöntemdir. Enum değerleri program geliştirirken yazdığımız kodların okunabilirliğini kolaylaştırır ve daha temiz kod üretmemize olanak sağlar.
Bu yapıyı bir örnek üzerinde inceleyelim. İş emirlerinin olduğu bir uygulamamızın olduğunu düşünelim. Bu iş emirleri oluşturulduktan itibaren belirli aşamalardan geçmektedir ve bu aşamaları kullanıcıya gösterebilmemiz için iş emrine ait durum bilgisini veri tabanında tutarız. Uygulamamızı geliştirirken belirli durumlara göre kodlamalar yapabiliyoruz. Bu durumları anlayabilmek için enum kullanmazsak aşağıdaki gibi geliştirilebilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
class Work { public string Name { get; set; } public string Detail { get; set; } public int StateId { get; set; } } var work = new Work(); if(work.StateId == 1) // Yeni { } else if(work.StateId == 2) // İşleniyor { } else if(work.StateId == 3) // Tamamlandı { } else if (work.StateId == 4) // Reddedildi { } |
Work adında bir sınıf oluşturdum. İş emrinin durumunu bildiren StateId alanında bir kod bulunmaktadır. StateId kolonu 1, 2, 3, 4 değerlerini almaktadır. StateId değerini kod içinde kullanırken devamlı 1 neydi 2 neydi tamamlandı hangisiydi şeklinde takılıyoruz. Çünkü sayısal değer bize bir anlam ifade etmiyor. Yorum satırı olarak da her yerde belirtme durumu da olmayabiliyor. Bu yazım şeklide kod okunabilirliğini zorlaştırmakta ve uygulamanın bakım maliyeti artmaktadır. Bu sıkıntıyı çözmek için enum yapıları geliştirilmiş.
Enum yapıların yazılım şekli şu şekildedir.
1 2 3 4 |
enum WorkState { New = 1, InProgress = 2, Completed = 3, Rejected = 4 } |
Burada 1, 2, 3, 4 olarak tanımlamaları yapabildiğimiz gibi yazmayabilirdik. Eğer integer olarak tanımlamadan tanımlarsak veri tabanına eklerken string olarak eklenecektir. Yani work tablosunda StateId alanında 1 değil de New yazacaktır.
Enum yapısını kodumuzda şu şekilde kullanıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
class Work { public string Name { get; set; } public string Detail { get; set; } public WorkState StateId { get; set; } } var work = new Work(); if(work.StateId == WorkState.New) { } else if(work.StateId == WorkState.InProgress) { } else if(work.StateId == WorkState.Completed) { } else if (work.StateId == WorkState.Rejected) { } |
İş emri durumuyla ilgili bir iş yaparken artık kodumuzdan direkt hangi durumda olduğunu daha iyi anlayabiliyoruz.
Enum yapıları kullanmak hata yapmamızı da engelliyor. Örneğin StateId == 5 ya da State == “İptall” yazarsak derleme aşamasında bu kısımda bize bir hata vermeyecektir ama algoritma olarak bizim beklediğimiz değerler 1, 2, 3, 4 ya da İptal, Yeni, Tamamlandı gibi değerler olacaktı. Yazım hatasından dolayı kodumuz doğru çalışmayacaktır. Bu yapıda ise zaten sabit değerler olduğu için yanlış seçemiyoruz. Seçsek bile kod derlenmeyeceğinden bu durumu geliştirme aşamasında farkedebiliriz.
Kullanım Alanları
Bu yapılar sabit değer olan her yerde kullanılabilir.
Haftanın günleri, renk seçimleri, kayıt durumları, kayıt tipleri gb örnekleri çoğaltabiliriz.
Bu yazıyla ilgili eklemek istediklerinizi ya da varsa sorularınızı yorum bölümünden yazabilirsiniz.