"Enter"a basıp içeriğe geçin

Enum – Enum Class – Typedef

Enum ve enum class birbirine benzeyen, kendi veritipimizi oluşturmaya yarayan anahtar kelimelerdir.

Enum

Enum kendi veri tipimizi oluşturmaya yarayan veri tiplerinden biridir. İlk tanımlama sırasında bu veri tipinin alabileceği değerler belirtilir. Oluşturulan enum tipine ait değişkenler  sadece bu değerleri  alabilir.

Enum (enumeration) kelime anlamı olarak numaralandırma demektir. Adı üzerinde, alabileceği değişkenleri numaralandırarak işleri yapar. Eğer biz kendimiz bir numara vermezsek ilk değer için 0 verir ve arttırarak devam eder. Eğer kendimiz bir numara verirsek, o değerin solundakilere aynı şekilde arttırarak numara vermeye devam eder.

Günleri tutan bir enum yapısı oluşturalım:
enum gunler{PAZARTESİ, SALI, CARSAMBA, PERSEMBE, CUMA}; //günler yapısının alabileceği değerleri uniform ilklendirme ile atadık

Nasıl integer -32000,+32000 arası sayıları değer olarak alabiliyorsa, bizim günler tipimiz de bu değerleri alabilir.

PAZARTESİ bu yapının bir değeridir. Ancak bunu bir string gibi düşünmemek gerekir. Çünkü biz onun PAZARTESİ olduğunu bilsek de, derleyici ne ifade ettiğini, ekrana basacağı zaman nasıl kullanması gerektiğini bilemez. Bunun yerine numara karşılıklarına göre işlemlerini yapar.

Yani biz bu yapı sayesinde if else, switch-case gibi mantıksal operatörleri  kullanabiliriz. Ancak bu numaralandırma tam olarak bir integer gibi değildir. Yani aritmetik işlemler yapamayız.

Ama standart enum’lar tür dönüşümüze izin verir. Mesela int a=PAZARTESI; diyebiliriz. a=0 olur.  Aslında cout<<PAZARTESİ; diyince 0 demesinin sebebi budur.

Direk string kullanmak yerine neden bu yapıya ihtiyaç duyduğumuza gelecek olursak: Öncelikle stringler temel bir tip değildir. Boyut olarak bir sınırları yoktur. İkinci olarak işlemcinin enum bir tip ile işlem yapması daha kolaydır.

Sonuç  olarak ucu açık olan string sınıfını kullanmak yerine, daha sınırlı ve sade olan, kendimizin tanımladığı enum yapısını kullanmak, hem performans hem de güvenlik açısından bize fayda sağlar.

Bu örnek çok küçük olduğu için fark anlaşılmayabilir. Ancak çok fazla verimizin olduğu bir alanda, mesela şehirlerin plakalarını tutacağımız zaman, yada veri tabanı gibi id ile işlemler yapmamız gerektiğinde işimizi kolaylaştırabilir.

 

Enum  class

Genel olarak class’lara benzerler. En önemli farkları, başka bir türe dönüşüme izin vermemeleridir. Yani yukarıda yaptığımız gibi int a=PAZARTESI gibi işlemler yapamayız. Yada cout<<PAZARTESI; diyemeyiz.

Enum class, türler arası dönüşüme izin vermediği için C tipi standart enum’dan daha güvenlidir.
Eğer dönüşümü kullanmak istiyorsak static_cast kullanabiliriz.

typedef) typedef anahtar kelimesi bir veri türünü farklı bir isim kullanarak ifade etmemizi sağlar. İki tane parametre almaktadır. Bunlardan ilki, veri türünü belirtir. İkincisi, ilk parametredeki veri türünü ifade edecek yeni bir ismi ifade eder. Yani sadece türün ismini değiştirir. Mesela int yerine tamsayı diyerek int türünü çağırmanı sağlar.

 

    Bir cevap yazın

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