👨🏼‍💻Kotlin Enum Class

Enum Sınıfları hakkında bilmeniz gereken her şey!

Hüseyin Özkoç
Huawei Developers - Türkiye
3 min readApr 12, 2023

--

Kotlin Enum Class

Giriş

Merhaba Sevgili Kotlin severler! Yeni makaleme hoş geldiniz. Bugün sizlere Enum sınıfını anlatacağım. Öncelikle Enum sınıflarının neden kullanıldığı ve ne işe yaradığından bahsetmek istiyorum.

Enum Class

Enum sınıfları, aynı veri kümelerinin gruplandırılmasına izin verir. Böylece gruplandırdığımız bu veri setlerinde seçeneklerin neler olduğunu kolayca görmemizi sağlar. Aynı şekilde Enum sınıfları da bize tip güvenliği sağlamaktadır. İsterseniz bunu bir örnekle daha iyi anlayalım.

Böylece Car sınıfı ile ilgili değerlerin ne olduğunu daha kolay anlayabiliriz.

Yukarıdaki basit örnekte gördüğümüz gibi Car ile ilgili bir veri seti oluşturduk ve bu sınıfı 3 sabitten oluşacak şekilde oluşturduk. Bu sayede araba sınıfı ile ilgili değerlerin ne olduğunu artık daha kolay anlayabiliyoruz çünkü bu 3 tip dışında başka bir değer alamıyor.

Şimdi ise konunun daha iyi anlaşılması için Enum sınıflarının özelliklerinden bahsetmek istiyorum.

1-Enum sınıfları abstact, open, inner, sealed olamaz.

Enum sınıfları abstact, open, inner, sealed olamaz.

2-Enum sınıfları final’dır. Bu nedenle, final anahtar sözcüğünün kullanılması gereksiz olduğuna dair bir uyarı verir.

Enum sınıfları final’dır.

3-Enum sınıfları bir constructor kullanabilir ve esasen bir sınıf oldukları için verileri o constructor’da tutabilirler.

Constructor kullanabilir ve esasen bir sınıf oldukları için verileri o Constructor’da tutabilirler.

4-Kotlin kodumuzu “Show Kotlin Bytecode” ile Java eşdeğerine dönüştürdüğümüzde arka planda her enum sabitinin aslında statik final sınıflar olarak tutulduğunu göreceğiz. Bu şekilde, onu kullanırken enum sabitlerinin nesnesini yaratmak zorunda değiliz. Aynı şekilde arka planda her enum sabitinin kendi sınıfını miras aldığını görüyoruz.

Bu örnekte haftanın günlerinin Enum sınıfımızın içine sırayla yazıldığını görüyoruz.
Kotlin kodumuzun Java karşılığına baktığımızda; her enum sabiti, statik bir son sınıf olarak arka planda tutulur ve kendi sınıfını miras alır. Daha detaylı bilgi için; https://www.youtube.com/watch?v=iaKHAe9DKvk&list=PL5qUTObM_k-SThUEvdlwagNTD3zieAY7t&index=22

5-Enum sınıflarının nesneleri oluşturulamaz.

Enum sınıflarının nesneleri oluşturulamaz.

6- Her Enum sabitinin varsayılan olarak adı ve sıra değerleri vardır. Name değeri Enum sabitinin String’ini verir. Ordinal enum sabitinin indeksini verir ve 0'dan başlar.

Her enum sabiti name ve ordinal değerine sahiptir.

7-Enum sınıfları herhangi bir sınıfı miras alamaz. Ancak herhangi bir arayüzü implemente edebilirler.

Enum sınıfları herhangi bir sınıfı miras alamaz.
Ancak herhangi bir arayüzü implemente edebilirler.

Aynı şekilde, Enum sıfımızın içine kullandığımız interface değerleri ve fonksiyonlarını implemente edebiliriz lakin bunu enum sabitleri için yapamayız. Böylece, her enum sabitlerinin içinde interface değer ve fonksiyonlarını tekrar tekrar override etmemize gerek kalmaz.

Enum sıfımızın içine kullandığımız interface değerleri ve fonksiyonlarını implemente edebiliriz lakin bunu enum sabitleri için yapamayız.

8-Enum sınıfları abstract değerler ve fonksiyonlar alabilir. Ayrıca, tüm enum sabitleri bu abstract yapıları override etmelidir. Ek olarak, enum sınıfları içinde open fonksiyonlar yazılabilir. Enum sabitlerinde bu open fonksiyonları override etmesi tamamen isteğe bağlıdır.

Enum sabitleri, arka planda enum sınıfımızı miras alan statik sınıflar olduğundan, bu nedenle abstract fonksiyonları ve değerleri override etmemiz gerekir.

9-Enum sabitleri, arka planda statik bir sınıf olarak görünseler de, özel yapıları nedeniyle bir interface implemente edemezler.

Sonuç

Sonuç olarak, Enum sınıfları, amaçlanan kullanımları için aynı veri kümelerinin gruplandırılmasına izin verir. Böylece gruplandırdığımız veri setleri ile mevcut seçenekleri rahatlıkla görebiliriz. Enum sınıfları bazı senaryolarda işimizi oldukça kolaylaştırdığı için sıklıkla kullanılmaktadır. Bu yüzden yazımda enum sınıflarının tüm özelliklerinden bahsetmeye özen gösterdim. Umarım sizin için faydalı bir yazı olmuştur! Diğer yazılarımda görüşmek üzere!

Referanslar

--

--