Tour of Scala

タプル

Language

Scalaではタプルは決まった数の要素を含む値であり、各要素はそれぞれの型を持ちます。 タプルは不変です。

タプルはメソッドから複数の値を返す際に特に役立ちます。

2つの要素を持つタプルは以下のように作ることができます。

val ingredient = ("Sugar" , 25)

ここではString要素を1つとInt要素を1つ含むタプルを作っています。

推論されるingredientの型は(String, Int)であり、これはTuple2[String, Int]の簡単な表記法です。

タプルを表すために、ScalaはTuple2, Tuple3Tuple22までのクラス群を使います。 それぞれのクラスは要素の数と同じ数の型パラメータを持ちます。

要素へのアクセス

タプルの要素へのアクセス方法の1つとして、位置があります。 個々の要素は_1_2などと名付けられます。

println(ingredient._1) // Sugar
println(ingredient._2) // 25

タプルでのパターンマッチング

タプルはパターンマッチングを使って分解することもできます。

val (name, quantity) = ingredient
println(name) // Sugar
println(quantity) // 25

ここではnameに推論される型はStringで、quantityに推論される型はIntです。

こちらはタプルのパターンマッチングの他の例です。

val planets =
  List(("Mercury", 57.9), ("Venus", 108.2), ("Earth", 149.6),
       ("Mars", 227.9), ("Jupiter", 778.3))
planets.foreach{
  case ("Earth", distance) =>
    println(s"Our planet is $distance million kilometers from the sun")
  case _ =>
}

また、for内包表記では以下のようになります。

val numPairs = List((2, 5), (3, -7), (20, 56))
for ((a, b) <- numPairs) {
  println(a * b)
}

タプルとケースクラス

ユーザーは時々、タプルとケースクラスの選択を難しいと思うかもしれません。ケースクラスには名前付き要素があります。それらの名前によってコードの可読性を改善できる場合があります。 上記の惑星の例ではタプルを使うより、case class Planet(name: String, distance: Double)を定義したほうがいいかもしれません。

Contributors to this page: