分解宣言とは
分解宣言(Destructuring Declaration)とは、
あるインスタンスを利用して、複数の変数を同時に宣言することです。
あるインスタンス(のプロパティ)を、いっぺんに複数の変数に分解するようなイメージになります。
fun main(args: Array) {
val student = Student("suzuki", 80.0)
// studentをnameとscoreに分解する
val (name, score) = student
println(name)
println(score)
}
data class Student(val name: String, var score: Double)
suzuki
80.0
これは、Studentクラスに暗黙的に自動実装される
componentNというメンバーを利用した機能です。
分解宣言は実際には次の処理を行っていることになります。
fun main(args: Array) {
val student = Student("suzuki", 80.0)
// 分解線gんの実体は次の処理になる
val name = student.component1() // nameに対応する、暗黙的に実装されるcomponentN()
val score = student.component2() // scoreに対応する、暗黙的に実装されるcomponentN()
println(name)
println(score)
}
data class Student(val name: String, var score: Double)
suzuki
80.0
分解実装はさまざまな場面で利用できますが、典型的な使い方はfor文で利用する場合です。
import kotlin.math.sqrt
fun main(args: Array) {
val list = listOf(
Point3D(1.0, 2.0, 3.0),
Point3D(4.0, 5.0, 6.0),
Point3D(7.0, 8.0, 9.0))
for ((x, y, z) in list) {
val distance = sqrt(x * x + y * y + z * z)
println("Distance: ${distance}")
}
}
data class Point3D(var x: Double, var y: Double, var z: Double)
Distance: 3.7416573867739413
Distance: 8.774964387392123
Distance: 13.92838827718412