Sobes.tech
Middle

Kotlin'de yapıcılar ve nesne başlatma ile çalışma özellikleri nelerdir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Kotlin'de, sınıflar birincil bir yapıcıya ve bir veya daha fazla ikincil yapıcıya sahip olabilir.

Birincil Yapıcı:

  • Sınıf başlığında ilan edilir:
    class User(val name: String, var age: Int = 0) {
        // sınıf gövdesi
    }
    
  • Gövdesi yoktur. Başlatma kodu init bloklarında çalıştırılır.
  • val veya var ile tanımlanan özellikler, sınıfın özellikleri haline gelir.
  • Yapıcı parametreleri, init bloklarında ve özelliklerin başlatılmasında kullanılabilir:
    init {
        println("Kullanıcı başlatılıyor $name")
    }
    
    val description = "Kullanıcı: $name, yaş: $age"
    
  • Eğer birincil yapıcı herhangi bir açıklama veya görünürlük modifikatörü içermiyorsa, constructor anahtar kelimesi atlanabilir.

init Blokları:

  • Sınıf örneği oluşturulurken çalıştırılan başlatma kodlarını içerir.
  • Sınıf içinde ilan edildiği sırayla çalıştırılır.
  • Birincil yapıcı çağrısından sonra (varsa), ikincil yapıcı çağrısından önce çalıştırılır.

İkincil Yapıcılar:

  • constructor anahtar kelimesiyle ilan edilir.
  • this() kullanarak kendi sınıfındaki başka bir yapıcıya veya super() kullanarak temel sınıfın yapıcısına çağrı yapabilir. Delegasyon çağrısı ilk komut olmalıdır.
    class User(val name: String) {
        constructor(name: String, age: Int) : this(name) {
            println("İkincil yapıcı")
            // ek başlatma mantığı
        }
    }
    
  • Eğer sınıfın bir birincil yapıcı varsa, tüm ikincil yapıcılar açık veya kapalı şekilde ona delegasyon yapmalıdır (this() kullanılarak).

Başlatma Sırası:

  1. Birincil yapıcı kodunun çalıştırılması (varsa).
  2. init bloklarının sırasıyla çalıştırılması.
  3. İkincil yapıcı kodunun çalıştırılması (kullanılıyorsa).

Örnek:

class Example(name: String) {
    init {
        println("$name için ilk init bloğu")
    }

    val property1 = "Özellik 1"

    init {
        println("$name için ikinci init bloğu")
    }

    constructor(name: String, age: Int) : this(name) {
        println("$name için ikincil yapıcı, yaş: $age")
    }
}

fun main() {
    val ex1 = Example("Kullanıcı1") // Çıktı: Kullanıcı1 için ilk init bloğu, Kullanıcı1 için ikinci init bloğu
    val ex2 = Example("Kullanıcı2", 30) // Çıktı: Kullanıcı2 için ilk init bloğu, Kullanıcı2 için ikinci init bloğu, ikincil yapıcı, yaş 30
}

Anahtar özellikler: birincil yapıcı için deklaratif sözdizimi, init bloklarıyla başlatma mantığı, ikincil yapıcılar arasında açık delegasyon, nesne oluşturmanın tutarlılığını sağlar.