16 Mart 2014 Pazar

Enumeration ve String

Programlama Dillerinde Enum
Java
Aşağıda Java için enum notlarım var.

Enum Sınıfı final'dır
enum Myenum {} şeklinden tanımlanan yapı, derleyici tarafından java.lang.Enum sınıfından türetilir ve final olarak tanımlanır. java.lang.Enum sınıfı bazı metodlar sunar. Bunlardan önemli olanları aşağıda yazdım.

Enum Sınıfının Önemli metodları
name
Enum'un ismini verir. Aşağıdaki örneğe bakabilirsiniz.
 
ordinal
Enum'un sırasal olarak değerini verir.

Not : Konu ile ilgili olarak Hibernate ile Enum Alanının Ordinal Değerinden Farklı Bir Değer Kullanmak başlıklı yazıya göz atabilirsiniz.
 
values
Tüm enumların üzerinden döngüyle dönebilmemizi sağlar.

Enum Bir Multiton'dır
Multiton name-value çifti şeklinde ve sınırlı sayıda yaratılan nesneleri temsil eder. Her bir enum değeri için bir nesne yaratılır. Açıklamasını burada görebilirsiniz.

Enum'u String'e Çevirmek
Java
Kendi metodumuzu kullanmak
Genellikle Typesafe Enum örüntüsüne dayalı bir yöntem kullanılıyor. Bu yöntemde enum'un private bir constructor metodu ve istenilen alanı veren bir getter metodu oluyor.

Aşağıdaki örnekte enum alanlara string atanıyor ve tanımlanan bir metod ile enum'un string karşılığı alınıyor.
public enum MyEnum {
FOO_BAR
("fooBar"), BAZ_QUUX ("bazQuux");

private final String varName;
private MyEnum(String varName) {
this.varName = varName();
}
public String varName() {
return varName();
}
}

name() metodunu kullanmak
Bir başka örnekte ise Enum sınıfı ile gelen name() metodu kullanılıyor.

enum LOAN {
    HOME_LOAN,AUTO_LOAN
}
String autoLoan = LOAN.AUTO_LOAN.name();//Çıktı olarak AUTO_LOAN verir
C#
ToString metodu
Enum'un ToString() metodu kullanılabilir. Örnek:
public enum myEnum
{
    IBM = 1,
    HP = 2,
    Lenovo = 3
}
Enum Data = myEnum.IBM;
Data.ToString ()
Enum'a atanan anotasyonu String'e Çevirmek
C# 
Enum'a annotation atanabilir.
Anotasyonu string'e çevirmeyi gösteren kod eklemem lazım.

Enum'u Arayüz'den Türetmek
Java'da enum final olduğu için türetilemez. Diğer dillerde Enum'u arayüzden türeterek belli bir işi yapan sabitler tanımlamak mümkün.  Örnek:
C++
C++1 ile aşağıdaki gibi yapılabilir.
enum class x : int

C#
Sanırım C# ve Java'nın ayrıldığı noktalardan birisi burada. Anladığıma göre enum sınıfı başka bir sınıftan türeyebiliyor. Örnek: Bu tür türemelerde enum için gizli bir int varmıl gibi düşünülebilir.

Enum ve Atanan Değer
Enum'a atanan değer derleme zamanında bilinen bir sabit değer olmalı (compile time constant)
Aşağıdaki kod çalışmaz.
enum RiskStates
{
 AL = Convert.ToInt64(Math.Pow(2,0)),
};
Ancak aşağıdaki kod çalışır.
public enum SiteRoles
{
User = 1 << 0,
Admin = 1 << 1,
Helpdesk = 1 << 2
}

Hiç yorum yok:

Yorum Gönder