タプル

タプル(tuple)とは

  • タプルは異なる型の要素を複数持つことができるコンテナオブジェクト
  • リストと同様にイミュータブル(不変)

タプルの使用

新しいクラスを作成せずに、複数の値を1つにグループ化して扱える。
Javaではメソッドの戻り値などで、複数の値を返却する場合は別途オブジェクトを作成する必要がありますが、タプルを使うと簡素なコードが実現できます。

object Main extends Application {
  val tuple = (1, 2, 3)
  val (a, b ,c) = tuple // 一括で代入
  println("a:" + a + " b:" + b + " c:" + c) // a:1 b:2 c:3
}

タプルの要素へのアクセス

各要素へのアクセスは以下の様にも書けます。上と同じ結果となります。

object Main extends Application {
  val tuple = (1, 2, 3)
  val t = tuple
  println("a:" + t._1 + " b:" + t._2 + " c:" + t._3)
}

タプルに異なる型の要素を格納

ここでの例は整数を使っていますが、各種オブジェクトの組み合わせでも問題ありません。つまり以下のように使うこともできます。(Listとの相違点になります)

val pair = (9, "tuple")
println(pair._1)
println(pair._2)

タプルの要素にアクセスする場合の添え字は 1 から始まります。
静的に型付けされたタプルは 1 から始まるという伝統によるものだそう

タプルの実装は?

タプルは実際にはケースクラスとして実装されており、scala.Tuple1 〜 scala.Tuple22 がそれに当たります。末尾の数字が引数の数に対応しており、22個の引数まで受け入れることができます。