タプルと関数が限界突破!22制限の撤廃について:Scala 3のパワーアップした表現力(4)

Scala 3.3.1
最終更新:2020年9月11日

[AD] scalapediaでは記事作成ボランティアを募集しています

この記事では、タプルや関数の22制限が撤廃され、限界突破した件について解説します。

タプルや関数に23個以上の要素を渡せるようになった

Scala 3では、Function型のパラメータやTuple型のフィールドについて掛かっていた22を最大値とする制約が撤廃され、なんと任意の数のパラメータを持つことができるようになりました。

Scala 3でも、Function0からFunction22Tuple0からTuple22までのトレイトは引き続き存在しています。
Scala 3からはこれに加えて、Function22を超える関数が新しいトレイトscala.FunctionXXLに、Tuple22を超えるタプルは新しいトレイトscala.TupleXXLへと変換されるようになりました。

外部リンク:Dotty Docs - FunctionXXL
外部リンク:Dotty Docs - TupleXXL

これらはどちらも配列を使って実装されています。

23個以上の要素を持つタプルを定義する例

タプルは任意の数のフィールドを持つことができます。

val tuple25 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25) println(tuple25)
外部リンク:Dotty Docs - Tuple

関数に23個以上の引数を定義する例

val function26 = (a: Int, b: Int, c: Int, d: Int, e: Int, f: Int, g: Int, h: Int, i: Int, j: Int, k: Int, l: Int, m: Int, n: Int, o: Int, p: Int, q: Int, r: Int, s: Int, t: Int, u: Int, v: Int, w: Int, x: Int, y: Int, z: Int) => a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t + u + v + w + x + y + z println(function26(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26))

サイト内検索