Data Class Nedir?
Selamlar 👋, bu yazımda sizlere projelerde sık kullanılan bir class türü olan Data Class‘ların ne olduğundan ve nasıl kullanıldığından bahsedeceğim. İyi okumalar.
🔹Nedir Bu Class Türü?
Data class’lar herkesin yaptığı tabir ile verileri tuttuğumuz sınıftır. Bu mu yani, bu kadar mı? Değil tabi ki ❗️ ❗️ ❗️
Bir class’ın Data class olabilmesi için bazı durumları yerine getirmesi gerekmektedir. Bunlar:
- “data” keyword’ü ile class tanımlanır ve en az bir parametre almalıdır.
- Parametre/parametreler val ya da var ile tanımlanmalıdır. Peki neden? Çünkü değişkenleri val ya da var yapma class içinde o değişkenlere erişimi sağlamaktadır.
- Default değer ataması yapabiliriz.
- Data class’lar open, abstract, sealed ya da inner yapılamaz. Yapıldığında zaten hata verecektir.
- Tüm data class’lar final yapıdadır. Bu yüzden miras alınamazlar. ”final” keyword’ü yok ama nasıl olabilir? Hemen Show Kotlin ByteCode’a bakıyoruz:
- Data class’lara; class, abstract class ya da interface verilebilir. Örneğin:
- En önemlisi de Data class kullanıldığında arka planda default olarak equals, hashCode, toString, copy, componentN gibi fonksiyonlar oluşturulur.
❗ NOT: Bu fonkiyonlar Data class’ın constructor’ı içerisindeki değişkenler için oluşturulur. Eğer siz ayrıca class içerisinde bir değişken oluşturursanız arka planda bu değişken için default olarak bu fonksiyonlar yer almaz.
Tekrar Show Kotlin ByteCode’ a dönelim.
🔹Data Class’larda Destructuring Declarations Kullanımı
- Destructuring Declarations ile class içerisindeki değişkene örneğin user.name şeklinde değil de direkt değişken ismini vererek ulaşabilmemizi sağlatıyor.
- Bu yapıyı kullanabilmek için class’mızın arka planda componentN’leri üretiyor olması gerekir. Düz bir class’ta yapamayız.
- Destructuring Declarations’ın yaptığı iş şu:
ilk parametreye component1() isimli fonksiyonu koy, ikinci parametreye component2() isimli fonksiyonu koy,.. şeklindedir.
gif kaynak: The End Writing GIF — Find & Share on GIPHY (2022). Available at: https://giphy.com/gifs/black-and-white-the-end-gif-tYyQObj37kBMs