C# Dersleri 24 - Enum Kullanımı

     İsimlendirilmiş, sayısal sabit değerleri bir araya getiren yapılara C# dilinde enumeration denir. enum keywordu kullanılarak tanımlanır.

     Enum Tanımlama

     Bir enumeration listteki her bir eleman, bir sayısal değeri temsil eder. Defaultta ilk enumun değeri 0'dır ve her bir elemanın değeri bir öncekinden büyüktür. Ancak bu değerleri değiştirebilirsiniz.     

enum Gunler { Pazartesi, Salı, Çarşamba, Perşembe, Cuma, Cumartesi, Pazar };

     Tanımlama enum keywordu ile başlar ve ardından enumeration listin adını belirtmeniz gerekir. Daha sonra da süslü parantezler içinde değerlerini yazarsınız. 

enum Gunler { Pazartesi = 1, Salı, Çarşamba, Perşembe, Cuma, Cumartesi, Pazar };
private void btnClick_Click(object sender, EventArgs e)
{
    int cuma = (int)Gunler.Cuma;

    MessageBox.Show("Cuma günü haftanın " + cuma + ". günü");
}

     Eğer hiç bir değişiklik yapmazsak listenin ilk elemanı olan "Pazartesi"ye 0, "Salı"ya 1... değeri atacaktı. Daha gerçekçi olması için "Pazartesi"ye 1 değeri atadım. Geri kalan elemanlarının değerlerini compiler otomatik olarak arttırdı.

     Neden Enum Kullanırız

     Enum kullanımı aslında çok kritiktir ancak çalıştığım yerlerde gördüm ki yazılımcılarımız enuma gerektiği kadar değer vermiyor. Enum kullanımını bir örnek üzerinden açıklamak istiyorum. 

     Bir fabrikadaki makinelerle ilgili bir uygulama yazdığınızı varsayın. Makinenin şuanki durumuna bağlı olarak yapacağınız işlemin değişeceğini kabul edelim; yani önce makinenin durumunu kontrol edeceksiniz. Bu durumu kontrol etmek için birkaç yol var. İlk olarak makinelerin durumlarını string olarak tuttuğunuzu(veritabanında veya herhangi bir data saklama biriminde) düşünelim. if(machine.Status == "working") şeklinde bir kod cümleniz olsun. Eğer makine çalışıyorsa ona göre işlem yapacaksınız. Ancak dalgınlıkla if(machine.Status == "woking") yazarsanız(ya da başka herhangi bir imla hatası), compiler bu hatayı yakalamanızda hiç yardımcı olmaz. Büyük bir projede bu şekilde bir hata yaptığınızda bu sorunun çözümü saatlerinizi alabilir. Bu yüzden bu tarz datayı string olarak saklamak sanırım en kötüsüdür. 

     Bunun yerine sayısal bir değer kullanmak daha mantıklıdır yani çalışan makineye 1 değerini atadıysanız if(machine.Status == 1) gibi. Ancak bir makineye ait 15 tane status varsa(çalışıyor,duraklatıldı,durdu,arızalı,setup vs) bunları nasıl hatırlayacaksınız? Kod yazarken hangi statusun hangi değere sahip olduğunu hatırlamak için belki defalarca kontrol etmeniz gerekecek.

     Doğru çözüm enum kullanmak. Şu şekilde bir enum oluşturduğunuzu düşünün :     

enum Statuses { Working, NotWorking, Faulty, Stopped };

     Daha sonra bir makinenin durumunu kontrol edecekseniz if(machine.Status == Statuses.Working) kod cümlesi kullanabilirsiniz. İmla hatası yapmanız imkansız. 15 farklı sayısal değeri de aklınızda tutmanıza gerek yok. 

     Sonuç : enum candır, bol bol kullanın.

YORUMLAR
Ömer Faruk
Ağustos 15, 2020 18:09
Çok teşekkür ederim bu kadar doyurucu bir içerik olamazdı.
Oktay
Nisan 28, 2020 23:14
Eğitim hayatında bile yazılım söz konusu olunca bir çok önemli nokta atlanıyor. Enum'da bunlardan biri. Bu zaman kadar geliştirdiğim web projelerinde kullanmadım. Bahsedildiği gibi büyük projeler olmadığı için bu değerleri kafama göre 0 veya 1 dedim. Enum kullanımı önemli. Teşekkürler.
Email Adresi *
Görüntülenecek İsim *
Yorum *
Paylaş
  • f