Kotlin Öğreniyorum, Companion Object ve Data Class — Part 3
Variables
2 tür değişken vardır
var = mutable yani değişebilir
val =immutable yani değişemez
Bu javadaki final keywordüne benzerdir.
İmmutable objeler thread safedir.
Companion Object
Kotlinde static properties ve fonsiyon yaratamayız ama companion object yaratabiliriz.Bu objenin içine sınıfımızın içinde static olmasını istediğimiz properitsleri, constantları, fonksiyonları tanımlayabiliriz.
örnek:
companion object {
private var instance: EventManger? = null
private val staticName= "bu string static"
fun getInstance(): EventManger {
if (instance == null) {
instance = EventManger()
}
return instance as EventManger
}
}Yukarıda companion object ‘den sonra isim de verebiliriz.İsim verirsek
sınıfAdı.CompanionObjectAdı şeklinde ulaşabilir ,isim vermezsekte sınıfAdı.Companion yazarak ulaşırız.
Data Class nedir
Data class bir class tanımlamasıdır , aşağıdaki fonksiyoneliteleri çok kısa bir şekilde içine alır (otomatik tanımlar):
- constructor
- Fields
- Getter ve setter fonksiyonları
- hashCode(), equals() ve toString() fonksiyonları
Class tanımalamızda data keywordünü kullandığımızda Kotlin otomatik olarak fieldlara ulaşılabilcek getter setterları ,hashCode(), equals(), toString(), copy() ve componentN() fonksiyonlarını yaratır.
Örnek tanımlama:
data class Book(val name: String, val author: String, var page: Int)copy() Fonksiyonu
immutable tanımlanan bir data classının bazı alanlarını değiştirmek istersek bunu kullanabilirz.
Örnek:
val : adventureBook = Book("Harry Potter ", "j. k. rowling", 700)val fantasticBook= adventureBook.copy(page = 650)
Burda adventureBook val olarak tanımlanmış ve Book sınıfından bir nesne atanmış.val tipli yani değiştirilemez tipli olduğu için copy() fonksiyonunu kullanarak bazı alanlarını değiştirebiliriz.
componentN() fonksiyonu
Bu da data classımınızın propertilerine ulaşmamızı sağlar
örneğin yularıdaki adventureBook classının propertilerine şu şekilde ulaşabiliriz,
adventureBook.component1() // nameadventureBook.component2()//authoradventureBook.component3() //page
