ProgramlamaAndroid Geliştirici

Kotlin'de yapıcılar nedir, hangi türleri vardır ve nesnelerin birincil ve ikincil yapıcılar aracılığıyla nasıl başlatıldığını açıklar mısınız?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

Konunun Tarihçesi:

Kotlin, nesnelerin bildirimini ve başlatılmasını Java ile karşılaştırıldığında basitleştirmiştir. Dil, birincil (primary constructor) ve ikincil (secondary constructors) iki tür yapıcı içerir. Bu, geliştiricilerin başlatma sürecini kontrol etmelerini ve sınıf örneklerinin oluşturulmasında daha esnek bir yönetim sağlamalarını mümkün kılar.

Sorun:

Kotlin programlamasında, yapıcı türleri arasındaki net ayırımın ne tür faydalar sağladığını ve bunun kodun okunabilirliği, güvenliği ve genişletilebilirliği üzerindeki etkilerini anlamak önemlidir. Yaygın bir hata, yanlış kombinasyonlar veya başlatma üzerindeki geçersiz yeniden tanımlamalardır; bu da beklenmedik hatalara yol açabilir.

Çözüm:

Kotlin'de birincil yapıcı, sınıfın isminin hemen ardından bildirilir ve constructor anahtar kelimesi ile genişletilebilir. İkincil yapıcılar, sınıfın gövdesinin içinde bildirilir ve her zaman başka bir yapıcıya this() ile veya temel yapıcıya super() ile devretmelidir.

Kod örneği:

class User(val name: String) { // birincil yapıcı var age: Int = 0 constructor(name: String, age: Int) : this(name) { // ikincil yapıcı this.age = age } }

Anahtar özellikler:

  • birincil yapıcı basittir, temel özellikler için kullanılır
  • ikincil yapıcılar, ek senaryolar ve aşırı yükleme için gereklidir
  • Kotlin'deki başlatıcılar (init blokları), her nesne oluşturulurken çalıştırılır ve birincil yapıcının parametrelerine erişebilir

Kandırmaca Soruları.

init bloğu ile yapıcı gövdesi arasındaki fark nedir?

init bloğu, nesne her oluşturulduğunda herhangi bir yapıcı aracılığıyla genel bir başlatma için kullanılırken, ikincil yapıcı gövdesi yalnızca belirli bir ikincil yapıcı çağrıldığında çalıştırılır.

class Example(val x: Int) { init { println("x = $x ile Başlatıldı") } constructor(x: Int, y: Int) : this(x) { println("İkincil yapıcı y = $y ile çağrıldı") } }

İkincil yapıcıdan vazgeçip sadece birincil yapıcıyı kullanmak mümkün mü?

Evet, eğer sınıfınızın tüm mantığı özelliklerin başlatılması ve init blokları ile kapsanabiliyorsa. İkincil yapıcı, yalnızca özel aşırı yükleme veya belirli mantık gerektiren durumlar için gereklidir.

Eğer ikincil yapıcı birincil yapıcıya devretmezse ne olur?

Kotlin'de bu yasaktır — derleyici bir hata verir: her ikincil yapıcı, ya başka bir ikincil yapıcıyı ya da birincil yapıcıyı this() ile açıkça çağırmak zorundadır.

Tipik Hatalar ve Antipatternler

  • Birden fazla yapıcıda başlatmayı tekrar etmeye çalışma
  • Gereksiz yere ikincil yapıcı kullanma
  • İkincil yapıcıda devredişin olmaması

Gerçek Hayattan Örnek

Olumsuz Durum

Projede her sınıf başlatma seçeneği için çok sayıda ikincil yapıcı eklendi, bu da kodun ağırlaşmasına neden oldu.

Artılar:

  • Esnek başlatma

Eksiler:

  • Kod tekrarı, yüksek bakım maliyeti, sınıf yapısının değiştirilmesinde hatalar

Olumlu Durum

Farklı nesne oluşturma senaryoları için birincil yapıcı, init bloğu ve companion object içinde fabrika yöntemleri kullanıldı.

Artılar:

  • Basitlik, minimum tekrarlanan kod, kolay bakım, şeffaf başlatma

Eksiler:

  • Fabrika yöntemleri API'sini düşünmek gerekir