Kotlin - 10 - Sınıf Tipleri


Data Class:
İş gerçekleştirmekten ziyade veri (Data) tutmak için oluşturduğumuz sınıflardır. Kotlinde bu tarz sınıfları sadece “class” yerine “data class” olarak iaretlersek, compiler birincil oluşturucu method’ u baz alarak aşağıdakileri tüm tanımlı özellikler için otomatik olarak oluşturur.
  1.            Equals() / hasCode()
  2.            toString() (“User(name=John, age=42)” şeklinde)
  3.            componentN() fonksiyonlar
  4.            copy() (bazı değerlerini koruyaran ufakdeğişikle kopyasını yaratır)

Tutarlılığı sağlamak ve anlamlı olması adına Data sınıflarının tanımı için şunlar gerekir:
  • Birincil oluşturucu method (primary constructor) en azından 1 parametre içermeli.
  • Tüm birincil oluşturucu parametreleri “var” veya “val” olarak işaretlenmeli.
  • Data sınıfları abstract, open, sealed veya inner olamaz.

Ve sadece interface implement edebilirler. (1.1 ile bu durum değişti artık class ta implente edilebilir)
  1.            Equals(), hasCode(), toString() için oluşturulmuş bir kod varsa compiler bunu oluşturmaz.
  2.            Eğer süper class componentN() içeriyorsa compiler ezebilirse bunu ezer yoksa hata bildirir
  3.            ComponentN() ve copy() methodları için ise tanıma müsaade etmez.

Eğer oluşturulan sınıf için JVM tarafında parametresiz constructor gerekiyorsa tüm parametreler definition esnasında default değer ile tanımlanmalıdır.


“Pair” ve “Triple” desteklenir. Çoğunlukla isimli veri sınıfları okunabilirlik için daha iyi çözümdür.


Enum ve Sealed Class:
Temel olarak Enum ve sealed class bir birine oldukça yakın ve sınırlı set içinden değer alabilir. Ancak aradaki temel fark Enum tek instance olabilir iken sealed tan birçok instance oluşturulabilir.
Enum Example:


Sealed Class:
Constructor ı private olmak zorunda, subclass ları aynı dosyada olmalı ve default olarak abstract tır.



Nested ve Inner Class:
Nested class lar bir member dır,  ancak ana class’a erişim sağlayamaz, bu noktada “Nested” yerine “Inner” yerine keyword’ü ile inner class yaratırsanız ana class için referansa sahip olursunuz. Çağırım şeklindede ufak bir farklılık oluşuyor, bu konu için örneği incelemekte fayda var.





Yorumlar

Yazılar

Kotlin - 1 - Giriş

Genesys Nuance-ASR Entegrasyonu Port Kullanımı

Kotlin - 3 - Paket tanımı ve Import