Serkan Ayyıldız

Meraklı bir yazılım uzmanı...

Java Enum (Enumerations) Tipler ve Kullanımı


Java'cı ve Java konusunda kendini geliştirmek isteyen yazılımcı meslektaşlarıma yeniden selamlar!

Bu makalemizde Java'nın en güzel yapılarından olan Enum'ları öğreneceğiz; enum diğer adıyla Enumerations olarak anılır ve en genel anlamda "sayılabilir" manasına gelmektedir.

Enumerations JDK 5 ile Java'ya gelen ve yazılımcıya önceden bazı değerleri kod tarafında sabitlemesine izin verir, böylece Java geliştiricisi sabitlenmiş değerleri her defasında yeniden tanımlamasına gerek kalmaz.

Buna en güzel örnek; mevsimler, aylar, haftanın günleri (Pazartesi,Salı..) gibi sabitleşmiş değerleri verebiliriz.

Sürekli "sabit" sözcüğünden bahsettiğimize göre Enumların final deyimi niteliğinde olduğunu belirtelim.Hatırlarsak başında final deyimi alan değişkenlerin değerleri baştan tanımlanır ve sonradan değiştirilemezdi.
Eğer C# programlama dilini biliyorsanız bunun readonly const deyimleriyle eşdeğer olduğununda farkındasınızdır, bilmiyorsanız da zararı yok. Ne de olsa her Java'cı C# bilecek diye bir kâide yok. :)

Bu kadar sözden sonra artık Java kodları yazmaya geçelim,öncelikle Java programlama kodlarımızı yazdığımız NetBeans uygulama geliştirme ortamını açıyoruz ve adım adım yeni bir proje oluşturuyoruz.

netbeans

netbeans projesi

java projesi



Java projemizi oluşturduğumuza göre sol ekrandaki "Projects" penceresinde yeni bir Java Enum dosyası
oluşturuyoruz:

netbeans

netbeans yeni proje

Bu örneğimizde Java enumumuzun adı "Aylar" olsun:

netbeans java

Java Enumerations tanımlamak için tıpkı değişken tanımlar gibi başa enum sözcüğü yazarız:

enum EnumDizisi{
 Eleman1, Eleman2, Eleman3, .. ;
}

java enum

Elbette programlama standartları gereği Türkçe karakterler kullanmıyoruz..

Peki bu enumerations ne işimize yarayacak diye sorarsanız benim en çok sevdiğim konu olan enum parametreli metotlar (fonksiyonlar) sizi bu konuda tatmin edecek diye düşünüyorum.
Aşağıdaki bir Java programında kullanıcıdan hangi ayda doğduğunu soran ve cevap olarak hangi astrolojik burç grubunda olduğunu söyleyen bir metodumuz olsun, tabi günü gününe soracak kadar detaylı davranmayacağız.Kaba taslak bir örnek olsun. :)

java enumerations

Gördüğünüz gibi enum tipleri metotlara parametre olarak verebiliyoruz, burada isteseydik String tipte ay ismi isteyebilirdik ancak istediğimiz verinin bir standardı olmazdı.Örneğin kullanıcıdan doğru yazılışı "Ağustos" bilgisini almak istiyoruz ancak ekrana "agustos" yazıyor, böylece programımızda daha önceden "agustos" adında bir tanım olmayacağı için programımız hataya düşüyor.

Yeri gelmişken; enum kullanmak işte bu gibi durumlarda yazılım projelerimizde bir standart yapılar belirlememize olanak sağlamaktadır ve mümkün olduğunca bu tarz enumerations kullanmanızı öneririm.

Enumların en güzel avantajlarından biri de enum değerleri karşılaştırılabilir yapılar oldukları için koşul ifadeleri ile birlikte kullanılabilirler:

java enum koşul

gibi güzel bir kullanım alanı olduğunu görebilirsiniz, ya da aynı örneği switch case ile yazarsak:

java enum switch case

şeklinde de kullanılabildiğini görebilirsiniz.

Elbette yılın ayları gibi çok sayıda (bu örnekte 12 ay olduğunu varsayarsak) if-else kullanımından ziyade switch-case kullanımı daha yerinde olacaktır.

Enumlarla ilgili bir diğer bilmemiz gereken konu ise bir enum listesindeki tüm enumların tümüne ulaşmak için values() metodunu kullanabilme şansımız olduğudur, bu şekilde bir döngü yardımıyla tüm enumlara erişebiliriz.
Ayrıca String olarak tanımladığımız enum değişkenini yeniden String biçime dönüştürmek için valueOf() metodundan faydalandığımızdır.

Programımız bu iki metodu kullanarak bütün enum değişkenlerini ekrana yazsın isteyelim:

java enum message

Şimdiye kadar enumları String sabitleriymiş gibi tanıdık ancak enumlar aynı zamanda sayısal değerleri alabilirler, daha doğrusu sayı değeri olan sabitlenmiş sayısal değişkenler diyebiliriz.

Aylar enum dizimizi aşağıda şekilde değiştirerek aylar ve takvim yılındaki kaçıncı sırada olduklarını gösteriyoruz:

java enum değer

Bu bize bir enum değişkeni ile hem String (enumun görünen kısmı - Ocak gibi) hem de sayısal int tipinde (Ocak ayı için 1 değeri gibi) iki ayrı sabit değişkeni aynı anda bellekte tutabilme şansı sunmaktadır.

Dikkat ederseniz enumları sürekli class (sınıf) dışında tanımlıyoruz, enumlar sınıf yapısında oldukları için içerisine constructor(yapıcı metot), metot ve özellikler (property) tanımlabiliyoruz: Java sınıfları konusuna
buraya
tıklayarak geri dönün ve nasıl oluşturulduklarına bir gözatın isterseniz.

Gelelim şimdi yukarıdaki kodların ne işe yaradığına :)

Amacımız bir foreach döngüsü ile bir önceki örneğimizdeki gibi ayları sırasıyla ekrana göstermek  ancak tek fark, 
her ay isminin yanında o ayın takvim yılındaki kaçıncı ay olduğu bilgisini de göstermek olacak, bu yüzden Java JFrame Form'lardan yararlanıyoruz.

Projemize JFrame Form ekleyelim:

netbeans jframe

java jframe form



ve ardından az önce oluşturduğumuz EnumlariGetir() metodumuzun dönüş tipini void'den String'e dönüştürüyoruz:

java String metot

Eğer Java'da iş yapan ve değer döndüren metotları unuttuysanız ya da karıştırıyorsanız
>buraya
tıklayarak inceleyin derim.

Metodumuzun dönüş tipinin yanı sıra metotdan gelen her ay için o ayın kaçıncı sırada olduğunu da yine String ifadeyle birleştiriyoruz,böylece bir taşta iki kuş vurmuş olacağız. :)

Konumuza devam edelim ve JFrame formumuza eklediğimiz butonumuza sağ tıklayarak Action Performed (hareket uygulandığında) olayına geçelim:

java button action

Enum dizimizi kullanarak içerisine metotlarımızı yazdığımız Astroloji sınıfımızı çağırıyoruz:

java sınıf instance

Yazdığımız bi dünya kodun karşılığını alıyoruz:

java joptionpane

Bu sayede bir enum setindeki her değişkenin ve birer String ve int tipinde değerler tutabildiğini öğrenmiş olduk.

Bu örneğimiz konunun başlangıcında, içerisinde yalnızca String ifade tutan ve oldukça sade bir yapısı olan 
Enum örneğine göre biraz daha fazla kod gerektirdiğinin farkındayım ve aslen bir .Net Framework (Microsoft)
yazılımcısı olarak Java'yı C# programlama diline göre kıyasladığımda kod ameleliği yapıldığını düşünüyorum.

Tabi Java programlama dilinin C# programlama diline göre güçlü yanları olduğunu da kabul etmek lazım ancak bu
makalemizin konusuna girmediği için detaylara girmiyorum.

Eğer şu ana kadar yukarıda yaptığımız örnekler kafanızı karıştırdıysa aşağıdaki 3 görselde makalenin tek seferde
özetini görebilir ve konuyu kafanızda canlandırabilirsiniz.

java String metot

java class

java sınıf instance

java joptionpane

Bu anlattığım örnekler tamamen konuyu somutlaştırabilmek adına olduğu için enumerations konusunda neler yapabileceğiniz sizin hayal gücünüze ve projenizde nasıl kullanacağınıza kalmış.

Bir sonraki Java makalemizde görüşmek üzere bol Java'lı günler dilerim. :)




Bir yorum bırak E-posta adresiniz yayınlanmayacaktır.

Menu