0Pricing
Kotlin Academy · レッスン

分解宣言

変数に展開します

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

オブジェクトの展開

オブジェクトから複数のプロパティを一度に取り出したいことがあります。

Kotlinの分割代入宣言を使うと、1行で1つのオブジェクトから複数の変数に代入できます。

分割代入の基本

= の左側にかっこで名前を並べます。Kotlinはオブジェクトの各コンポーネントを順番に代入します。

データクラスではこれが自動的にサポートされます。

data class User(val name: String, val age: Int)

fun main() {
    val user = User("Alice", 30)
    val (name, age) = user
    println(name)
    println(age)
}

仕組み

内部では、分解宣言によって生成されたcomponent1()、component2()などが呼び出されます。

各変数の位置が、対応するコンポーネント関数に対応します。

data class Point(val x: Int, val y: Int)

fun main() {
    val p = Point(3, 7)
    println(p.component1())
    println(p.component2())
}

順序が重要

変数は名前ではなく、位置によって対応付けられます。

最初の変数には、何という名前を付けたかに関係なく、常に最初のコンストラクターのプロパティが割り当てられます。

data class Pair2(val first: Int, val second: Int)

fun main() {
    val (a, b) = Pair2(10, 20)
    println(a) // first property
    println(b) // second property
}

コンポーネントのスキップ

必要のないコンポーネントをスキップするには、アンダースコア_を使用します。

一部の値だけが必要な場合に、コードをすっきり保てます。

data class User(val name: String, val age: Int, val city: String)

fun main() {
    val (name, _, city) = User("Mia", 28, "Paris")
    println(name)
    println(city)
}

ループでの分解宣言

分解宣言は、オブジェクトのコレクションを反復処理するときに特に役立ちます。

forヘッダー内で各要素を直接展開できます。

data class User(val name: String, val age: Int)

fun main() {
    val users = listOf(User("A", 20), User("B", 25))
    for ((name, age) in users) {
        println(name + " is " + age)
    }
}

Mapエントリの分解宣言

Mapのエントリはキーと値のコンポーネントを提供するため、分解宣言をサポートしています。

これにより、Mapの反復処理を非常に読みやすく記述できます。

fun main() {
    val scores = mapOf("Alice" to 90, "Bob" to 85)
    for ((name, score) in scores) {
        println(name + ": " + score)
    }
}

複数の値を返す

関数はデータクラスを返すことができ、呼び出し側でその結果を分解宣言できます。

これは出力パラメーターに代わる、すっきりした方法です。

data class MinMax(val min: Int, val max: Int)

fun minMax(nums: List<Int>): MinMax {
    return MinMax(nums.min(), nums.max())
}

fun main() {
    val (low, high) = minMax(listOf(3, 1, 8, 5))
    println(low)
    println(high)
}

PairとTripleの分解宣言

標準ライブラリのPairとTripleも分解宣言をサポートしています。

クラスを定義せずに、値を手軽にまとめたい場合に便利です。

fun main() {
    val pair = Pair("x", 1)
    val (label, value) = pair
    println(label)
    println(value)
}

ラムダパラメーターの分解宣言

ラムダのパラメーターリスト内で直接分解宣言できます。

エントリやペアをmapするときによく使われます。

fun main() {
    val map = mapOf(1 to "one", 2 to "two")
    val text = map.map { (key, value) -> "" + key + "=" + value }
    println(text)
}

まとめ

分解宣言を使うと、オブジェクトを変数に展開できます。

  • =の左側で括弧を使用します
  • コンポーネントは位置によって対応付けられます
  • _でスキップできます
  • ループ、ラムダ、戻り値で使用できます
data class Result(val ok: Boolean, val message: String)

fun main() {
    val (ok, message) = Result(true, "done")
    println(ok)
    println(message)
}

理解度チェック

分解宣言についての理解度を確認しましょう。

まとめ

分解宣言について学びました。

  • オブジェクトを複数の変数に展開します
  • componentN()を介して位置によって対応付けられます
  • _で不要なコンポーネントをスキップできます
  • ループ、Map、ラムダ、戻り値で使用できます

次は、セットやMapなどのコレクション内でデータクラスを使用します。

よくある質問

「分解宣言」レッスンは無料ですか?

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

「分解宣言」で何を学びますか?

変数に展開します ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「分解宣言」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. データクラスの宣言
  2. copyとequals
  3. 分解宣言
  4. コレクション内のデータクラス
← Kotlin Academyに戻る