English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala メソッドと関数

Scalaにはメソッドと関数がありますが、意味論的にはほとんど違いはありません。Scalaのメソッドはクラスの一部であり、関数は変数に割り当てられるオブジェクトです。他の言葉で言えば、クラス内で定義された関数はメソッドです。

ScalaのメソッドはJavaのものと似ています。メソッドはクラスの一部です。

Scalaの関数は完全なオブジェクトであり、Scalaの関数は実際にはTraitを継承したクラスのオブジェクトです。

Scalaでは val 文は関数を定義することもできます。def 文でメソッドを定義します。

class Test{
  def m(x: Int) = x + 3
  val f = (x: Int) => x + 3
}

注意:翻訳上、関数(function)とメソッド(method)には違いはありません。

メソッド宣言

Scalaメソッドの宣言形式は以下の通りです:

def functionName([引数リスト]): [戻り値型]

等号とメソッドの本体を書かない場合、メソッドは暗黙的に抽象(abstract)を含み、その型もまた抽象型となります。

メソッドの定義

メソッドの定義は、一つの def キーワードから始まり、オプションの引数リスト、一つのコロン :、メソッドの戻り値型、一つの等号 =、最後にメソッドの本体が続きます。

Scalaメソッドの定義形式は以下の通りです:

def functionName([引数リスト]): [戻り値型] = {
   function body
   return [expr]
}

上記のコードでは 戻り値型 任意の合法なScalaデータ型でできます。引数リストの引数は、カンマで区切ることができます。

以下のメソッドは、引き渡された2つの引数を足し合わせて合計を求める機能を持っています:

object add{
   def addInt( a:Int, b:Int ) : Int = {
      var sum:Int = 0
      sum = a + b
      return sum
   }
}

メソッドが戻り値を持たない場合、戻り値として Unit、これはJavaの void、例示として以下のようになります:

object Hello{
   def printMe(): Unit = {
      println("Hello, Scala!")
   }
}

メソッドの呼び出し

Scalaは、さまざまなメソッドの呼び出し方法を提供しています:

以下は、メソッドの呼び出しの標準形式です:

functionName( 引数リスト )

メソッドが例のオブジェクトを使用して呼び出された場合、Javaの形式を使用できます(使用 . 号):

[instance.]functionName( 引数リスト )

上記の例は、メソッドの定義と呼び出しの例を示しています:

object Test {
   def main(args: Array[String]) {
        println( "返却値 : " + addInt(5,7) );
   }
   def addInt( a:Int, b:Int ) : Int = {
      var sum:Int = 0
      sum = a + b
      return sum
   }
}

上記のコードを実行すると、以下の結果が得られます:

$ scalac Test.scala 
$ scala Test
返却値 : 12

Scalaは機能型言語であり、したがって関数はScala言語の核心です。以下のいくつかの機能概念は、Scalaプログラミングをよりよく理解するのに役立ちます:

関数の概念を解説し、例を示します
関数の名前付き呼び出し(Call-by-Name)指定関数パラメータ名
関数 - 可変パラメータ再帰関数
デフォルトパラメータ値高階関数
内嵌関数匿名関数
偏適用関数関数カリング(Function Currying)