タプルを分解する
値を取り出します。
「タプルを分解する」はCoddyKit上の無料Scala for Backend Engineering & Functional Programmingレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはScala for Backend Engineering & Functional Programming学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。
値を取り出す
タプルを作成することは、処理の半分にすぎません。内部の値を使うには、値を取り出す必要があります。
Scalaには主に2つの方法があります。番号付きアクセサーとパターンによるデストラクチャリングです。このレッスンでは両方を扱います。
位置でアクセスする
タプルの各要素には位置があり、._1、._2などで読み取れます。
位置は0ではなく1から始まることに注意してください。したがって、._1が最初の要素です。
val person = ("Alice", 30)
println(person._1)
println(person._2)コードでアクセサーを使う
1つの要素だけが必要な場合、位置指定アクセサーが便利です。
ここではペアから年齢を読み取り、1を加えています。アクセサーは元の要素の型を返すため、そのまま計算できます。
val record = ("Bob", 42)
val nextYear = record._2 + 1
println(nextYear)valによるデストラクチャリング
._1や._2を読み取る方法は、追いにくくなることがあります。デストラクチャリングを使うと、各要素に一度に名前を付けられます。
このvalパターンでは、1行でnameとageを束縛しています。
val (name, age) = ("Cara", 25)
println(name)
println(age)デストラクチャリングが役立つ理由
名前付き変数は、番号付きの位置よりもはるかに読みやすくなります。
ageとperson._2を比較すると、デストラクチャリングしたほうが意図が明確で、1つずれた位置を参照するミスも避けられます。
val (city, population) = ("Lyon", 500000)
println(s"$city has $population people")3要素のデストラクチャリング
デストラクチャリングはペアに限らず、任意のサイズのタプルで使えます。
ここでは3要素のタプルを、1つの文で3つの名前付き変数に展開しています。
val (id, label, active) = (7, "task", true)
println(id)
println(label)
println(active)アンダースコアで無視する
値の一部だけが必要な場合もあります。アンダースコア_を使うと、その位置をスキップできます。
ここでは名前だけを残し、年齢は完全に無視しています。
val (name, _) = ("Dana", 40)
println(name)関数の結果をデストラクチャリングする
タプルを返す関数は、デストラクチャリングと自然に組み合わせられます。
関数を呼び出す場所で返された2つの値に名前を付けられるため、結果の意味がコードから明確になります。
def minMax(a: Int, b: Int) = (a min b, a max b)
val (low, high) = minMax(8, 3)
println(low)
println(high)ペアを入れ替える
2要素タプルには、要素の順序を反転させる組み込みのswapメソッドがあります。
これにより順序を逆にした新しいペアが返されます。場合によっては便利です。
val pair = ("a", 1)
println(pair.swap)forでデストラクチャリングする
ペアのコレクションをループするときは、ループヘッダー内でデストラクチャリングできます。
反復するたびに、各ペアが自動的にkeyとvalueに展開されます。
val pairs = List(("a", 1), ("b", 2))
for ((key, value) <- pairs) println(s"$key=$value")型は保持される
デストラクチャリングによって型情報が失われることはありません。各名前付き変数は、その要素の正確な型を保持します。
したがってval (n, age) = ("Eve", 33)では、nはString、ageはIntとなり、型安全に使用できます。
val (n, age) = ("Eve", 33)
println(n.length)
println(age * 2)確認問題
タプルのデストラクチャリングについて学んだことを確認しましょう。
まとめ
タプルの値は、._1のような位置指定アクセサー(1始まり)で取り出せます。または、val (a, b) = pairのようなデストラクチャリングを使うと、より明確に記述できます。
アンダースコアで不要な要素をスキップでき、デストラクチャリングはforループでも使えます。型も常に保持されます。次はレンジについて学びます。
よくある質問
「タプルを分解する」レッスンは無料ですか?
はい。「タプルを分解する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Scala for Backend Engineering & Functional Programmingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。
「タプルを分解する」で何を学びますか?
値を取り出します。 ブラウザで直接実行するハンズオンコードでScala for Backend Engineering & Functional Programmingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Scala for Backend Engineering & Functional Programmingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのScala for Backend Engineering & Functional Programmingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「タプルを分解する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このScala for Backend Engineering & Functional Programmingレッスンでコードを書いて実行できますか?
はい。すべてのScala for Backend Engineering & Functional Programmingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。