ProgramlamaAndroid Geliştirici

Kotlin'de nesnelerin değişmezliği nasıl uygulanır ve bu Java'dan nasıl farklıdır? Doğru ve yanlış yaklaşımlar için örnekler verin, değişmez nesnelerle çalışma ile ilgili olası nüansları açıklayın.

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

Cevap.

Kotlin'de değişmezlikle genellikle bir nesnenin oluşturulduktan sonra durumunun değiştirilememesi anlamına gelir. Bu, val (değiştirilemez) özelliklerin kullanılmasıyla ve iç verileri değiştiren yöntemlerin bulunmadığı, yalnızca yapıcıda başlatılan sınıfların oluşturulmasıyla sağlanır.

Kotlin, Java'dan farklı olarak, data class gibi değişmez sınıflar oluşturmak için kullanışlı bir mekanizma sağlar ve List, Set, Map gibi koleksiyonlar (varsayılan olarak değişmezdir). Ancak, Kotlin'de temel koleksiyonların yalnızca arayüz düzeyinde değişmez olduğunu, nesne koleksiyonunun iç yapısının MutableList vb. dönüşüm yoluyla değiştirilebileceğini anlamak önemlidir.

Doğru değişmezlik örneği:

// Data class ve val değişmezlik sağlar data class User(val name: String, val age: Int) val user = User(name = "Ivan", age = 30) // user.name = "Sergey" // DERLEME HATASI

Değişmezliği ihlal eden kod örneği:

class User(var name: String, var age: Int) val user = User("Ivan", 30) user.name = "Sergey" // Nesne değiştirilebilir

Nüanslar:

  • val alanları ile bir data class bile tam anlamıyla değişmezliği garanti etmez, eğer alanlar referans türleri ise ve iç durumu değiştiriliyorsa.
  • Gerçek değişmezlik için yalnızca val + değişmez türler (örneğin, val scores: List<Int> gibi) kullanın.

Kandırmaca soru.

Sadece val özelliklere sahip data class nesneleri tam anlamıyla değişmez midir?

Cevap: Hayır, eğer özellikler değiştirilebilir nesneler ise (örneğin, val items: MutableList<Int>), iç durum değiştirilebilir.

Örnek:

data class Group(val members: MutableList<String>) val group = Group(mutableListOf("Tom", "Jerry")) group.members.add("Spike") // iç durum değişiyor

Konuyla ilgili incelikleri bilmemekten kaynaklanan gerçek hata örnekleri.


Hikaye

Projede val özelliği olan bir değişmez data class kullanılıyordu. Bir geliştirici, nesnenin değiştirilemeyeceğini bekliyordu, ancak başka bir geliştirici koleksiyona yeni öğeler ekledi. Bu, verilerin tutarsızlığına ve iki niteliğin paralel olarak ortak listeyi değiştirdiği durumlarda zor tespit edilen hatalara yol açtı.


Hikaye

Değiştirilebilir bir koleksiyona sahip bir sınıf örneği uygulama katmanları arasında iletildiğinde, bir katman içeriği değiştiriyor, diğer katmanı bilgilendirmiyordu. Bu, UI'nın meydana gelen değişikliklerden haberdar olmadığı ve geçersiz başlangıç verileri ile çalıştığı durumlara yol açtı.


Hikaye

Geliştirici, Kotlin'deki List'in her zaman değişmez olduğunu yanlışlıkla varsaydım. Aslında, arka planda Java'dan geçen bir uygulama (ArrayList) kullanılıyordu ve listenin değiştirilmesi, beklenmeyen veri kaybı ve veritabanı ile çalışma sırasında hatalara yol açtı.