1. 概要

この短いチュートリアルでは、Scalaで繰り返しパラメーター機能を使用する方法を説明します。

他の多くのプログラミング言語にも同様の機能があるため、この言語機能はScala専用ではありません。 Javaのように、この機能は varargs としても知られているものもありますが、同じ概念です。

2. Scalaで繰り返されるパラメーター

繰り返しパラメーターのサポートを提供しない言語では、開発者はarrayまたはlistを作成して複数の引数を送信する必要があります。 時々これは面倒になり、ボイラープレートコードになってしまいます。

2.1. 繰り返されるパラメーターを使用した関数の定義

Scalaの内部では、繰り返されるパラメーターは配列として扱われ、空にすることもできます。 したがって、メソッドが繰り返しパラメーターを受け取った場合、配列で行うことは何でもできます。

scala> def myFunction(times: Int, strings: String*): String = {
     | (strings.mkString(" ") + "\n") * times
     | }
def myFunction(times: Int, strings: String*): String

ただし、繰り返しパラメータを使用する場合は、考慮する必要のあるルールがいくつかあります。

  • 繰り返されるパラメータは常に最後のメソッドパラメータです
  • 繰り返されるパラメーターは同じタイプである必要があります(つまり、intStringを送信することはできません)
  • メソッドは、最大で1つの繰り返しパラメーターを持つことができます

2.2. 繰り返されるパラメーターを使用した関数の呼び出し

以前に定義した関数の呼び出しは、今では簡単です。 たとえば、3つのStringパラメータを使用して呼び出します。

scala> myFunction(3, "scala", "is", "awesome") 
val res0: String = 
"scala is awesome 
scala is awesome 
scala is awesome "

さらに、繰り返されるパラメーターの文字列なしで関数を呼び出すこともできます。 関数でこれを行うことにより、3つの新しい行を取得します。

scala> myFunction(3)
val res1: String = "
 
 
"

2.3. スプラットオペレーター

状況によっては、すでに List、がありますが、呼び出すメソッドではパラメーターを繰り返す必要があります。 リストを送信しようとすると、エラーが発生します。

scala> val lst = List("Scala", "is", "awesome")
val lst: List[String] = List(Scala, is, awesome)

scala> myFunction(3, lst)
                     ^
error: type mismatch;
found   : List[String]
required: String

この場合、コレクションを繰り返しパラメーターの有効な入力に変換するsplat演算子を使用する必要があります。

scala> myFunction(3, lst:_*)
val res2: String =
"Scala is awesome
Scala is awesome
Scala is awesome"

3. 結論

この短い記事では、Scalaで繰り返しパラメーターを使用する方法を見ました。