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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Data Classの基本:自動生成されるメソッド
- copy()と部分的なオーバーライドによるコピー
- componentNによる分割代入宣言
- コレクションとMapキーで使うData Class