Destructuring declaration'lar, bir nesneyi doğrudan tanımda değişkenlere "yaymayı" sağlar, bu da kodu daha anlaşılır hale getirir. Tarihsel olarak, Java ve diğer dillerde her bileşen için ayrı bir getter yazmak gerekiyordu, bu da sentaksı karmaşık hale getiriyordu. Kotlin, destructuring desteği için özel componentN() yöntemlerini tanıttı.
Sorun: Bileşik nesnenin parçalarını manuel olarak almak rahat değildir - çokça atama yapmak gerekir, bu da kodun okunabilirliğini azaltır.
Çözüm: Data class, derleme sırasında otomatik olarak componentN() metodlarını alır, bu da property değerlerini almak için destructuring declaration'ları kullanılmasına olanak tanır.
Kod örneği:
data class User(val name: String, val age: Int) val user = User("Pavel", 32) val (name, age) = user println("$name is $age years old") // Pavel is 32 years old
Anahtar özellikler:
Destructuring declaration ile kaç değişken elde edilebilir?
Sınıfta tanımlı componentN() metodları kadar. Data class için, birincil yapılandırıcıda tanımlı tüm özellikler için otomatik olarak oluşturulur (255'e kadar).
Destructuring, normal (data olmayan) sınıflarla çalışır mı?
Sadece sınıfta manuel olarak componentN() metodları varsa çalışır.
Örnek:
class Point(val x: Int, val y: Int) { operator fun component1() = x operator fun component2() = y } val (x, y) = Point(10, 20)
Destructuring declaration'da değerler atlanabilir mi?
Evet, dış değişkenleri atlamak için _ (alt çizgi) kullanın.
val (_, onlyAge) = user
Olumsuz Durum
Projede bir geliştirici, componentN() metodları olmayan normal bir sınıf için destructuring kullanmaya çalıştı, bu da derleme hatasına yol açtı, ardından çok büyük bir sınıf (10+ özellik) için bunları manuel olarak eklemeye başladı.
Artıları:
Eksileri:
Olumlu Durum
Sınırlı sayıda parametreye sahip data class kullanımı (örneğin, Result(val data: T, val error: Throwable?)), API'de cevabı işlerken kısa destructuring declaration ile.
Artıları:
Eksileri: