0Pricing
Kotlin Academy · レッスン

componentNによる分割代入宣言

component関数を使ってdata classのインスタンスを変数に分割代入します。

「componentNによる分割代入宣言」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

分解宣言の基本

分解宣言を使うと、1つのオブジェクトを複数の変数に一度に展開できます。componentN()演算子関数が使用されます。

データクラスの分解

データクラスはcomponent1、component2、...を自動生成するため、val (a, b) = objと記述できます。

data class Point(val x: Int, val y: Int)
fun main() {
    val p = Point(3, 5)
    val (x, y) = p
    println("x=$x, y=$y")
}

Pair の分解

標準ライブラリの型であるPairとTripleは、標準で分解宣言をサポートしています。

fun main() {
    val pair = "Ada" to 35
    val (name, age) = pair
    println("$name is $age")
}

Triple の分解

Tripleは3つの値を保持し、それらを3つの変数に分解できます。

fun main() {
    val rgb = Triple(255, 128, 0)
    val (r, g, b) = rgb
    println("R=$r G=$g B=$b")
}

Map の反復処理での分解

Map のエントリには、component1(キー)とcomponent2(値)があります。forループのヘッダーで分解できます。

fun main() {
    val ages = mapOf("Alice" to 30, "Bob" to 25)
    for ((name, age) in ages) {
        println("$name -> $age")
    }
}

ラムダでの分解

Pair を受け取るラムダでは、パラメーターを直接分解できます。

fun main() {
    val pairs = listOf("a" to 1, "b" to 2, "c" to 3)
    pairs.forEach { (letter, num) -> println("$letter=$num") }
}

_ による値の無視

不要な値をスキップするには、アンダースコア_を使用します。

data class User(val name: String, val email: String, val age: Int)
fun main() {
    val u = User("Ada", "ada@example.com", 35)
    val (name, _, age) = u
    println("$name ($age)")
}

複数の値を返す

関数はPairまたはカスタムデータクラスを返すことができ、呼び出し側で分解できます。

data class Result(val sum: Int, val product: Int)
fun computeBoth(a: Int, b: Int) = Result(a + b, a * b)
fun main() {
    val (s, p) = computeBoth(4, 5)
    println("sum=$s product=$p")
}

カスタム componentN

operator fun componentN()を宣言すると、どのクラスでも分解宣言をサポートできます。

class RGB(val r: Int, val g: Int, val b: Int) {
    operator fun component1() = r
    operator fun component2() = g
    operator fun component3() = b
}
fun main() {
    val (red, green, blue) = RGB(255, 100, 0)
    println("$red $green $blue")
}

withIndex() を使った分解

withIndex()を使って反復処理する際に、インデックスと値を Pair として扱います。

fun main() {
    val fruits = listOf("apple", "banana", "cherry")
    for ((idx, fruit) in fruits.withIndex()) {
        println("$idx: $fruit")
    }
}

制限:位置に基づく

分解宣言は名前ではなく位置に基づきます。データクラスのフィールドの順序を変更すると、呼び出し側で意味が気付かないまま変わります。

data class Point(val x: Int, val y: Int)
fun main() {
    val p = Point(10, 20)
    val (a, b) = p // a=x, b=y
    // Add a property in the middle and old destructuring shifts!
    println("$a $b")
}

クイックチェック

i番目のプロパティの分解を可能にする演算子関数はどれですか?

まとめ

分解宣言ではcomponentN()演算子関数を使用します。データクラス、Pair、Triple、Map のエントリは標準で分解宣言をサポートしています。値をスキップするには_を使用します。ただし、分解宣言は名前ではなく位置に基づく点に注意してください。

よくある質問

「componentNによる分割代入宣言」レッスンは無料ですか?

はい。「componentNによる分割代入宣言」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。

「componentNによる分割代入宣言」で何を学びますか?

component関数を使ってdata classのインスタンスを変数に分割代入します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「componentNによる分割代入宣言」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKotlin Academyレッスンでコードを書いて実行できますか?

はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Data Classの基本:自動生成されるメソッド
  2. copy()と部分的なオーバーライドによるコピー
  3. componentNによる分割代入宣言
  4. コレクションとMapキーで使うData Class
← Kotlin Academyに戻る