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 ([参数列表]) : [return type]

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


メソッド定義

メソッド定義は1つのdefキーワードで始まり、続いてオプションのパラメータリスト、コロン:とメソッドの戻り値の型、等号=、最後にメソッド本体です。

Scalaのメソッド定義の形式は次のとおりです:

def functionName ([参数列表]) : [return type] = {
   function body
   return [expr]
}

上記のコードでは、return typeは任意の有効な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( "Returned Value : " + addInt(5,7) );
   }
   def addInt( a:Int, b:Int ) : Int = {
      var sum:Int = 0
      sum = a + b

      return sum
   }
}

上記のコードを実行すると、出力結果は次のとおりです:

$ scalac Test.scala 
$ scala Test
Returned Value : 12

Scalaは関数型言語でもあるため、関数はScala言語の核です。以下の関数の概念は、Scalaプログラミングをより深く理解するのに役立ちます:

関数の概念の解説と例
関数の名前渡し呼び出し(Call-by-Name) 関数のパラメータ名の指定
関数 - 可変引数 再帰関数
デフォルト引数値 高階関数
ネスト関数 無名関数
部分適用関数 関数のカリー化(Function Currying)
その他の拡張