分解宣言

分解宣言とは

分解宣言(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 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Scroll to top