前章:トレイト


  • Scalaのタプルは、固定数の要素を含む値であり、各要素はそれぞれ固有の型を持ち不変で
// (String, Int)で推論されるタプル
val ingredient = ("Sugar", 25)

要素へのアクセス

  • 要素にアクセスする方法の一つに位置(他言語のインデックスのようなもの)を利用することができる
println(ingredient(0)) // Sugar
println(ingredient(1)) // 25

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

  • タプルはパターンマッチングを使って分解することもできる
// 左辺にパターンを書き、右辺を分解して束縛する
val (name, quantity) = ingredient
println(name)     // Sugar
println(quantity) // 25
 
val numPairs = List((2, 5), (3, -7), (20, 56))
for (a, b) <- numPairs do
  println(a * b)
// 10
// -21
// 1120
 
// 1要素目が"Earth"の時だけ2要素目を束縛して出力
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 _ =>
} 

タプルとケースクラス

  • タプルもケースクラスも複数の値をまとめて1つの値として扱う点で似ているが、要素が名前を持つことで可読性が上がるのであれば、ケースクラスの使用する

タプルは無名で位置アクセスのみ


次章:ミックスインを使用したクラス合成