Scala-functions

提供:Dev Guides
移動先:案内検索

Scala-関数

関数は、タスクを実行するステートメントのグループです。 コードを別々の機能に分割できます。 コードを異なる機能に分割する方法はユーザー次第ですが、論理的には、通常、各機能が特定のタスクを実行するように分割されます。

Scalaには関数とメソッドの両方があり、メソッドと関数という用語はわずかな違いを除いて同じ意味で使用しています。 Scalaメソッドは、名前、署名、オプションで注釈、およびバイトコードを含むクラスの一部であり、Scalaの関数として変数に割り当てることができる完全なオブジェクトです。 つまり、あるオブジェクトのメンバーとして定義されている関数は、メソッドと呼ばれます。

関数定義はソースファイルのどこにでも表示でき、Scalaはネストされた関数定義、つまり他の関数定義内の関数定義を許可します。 最も重要な注意点は、Scala関数の名前に+、++、〜、&、-、-、-、\、/、:などの文字を含めることができることです。

関数宣言

Scalaの関数宣言には次の形式があります-

def functionName ([list of parameters]) : [return type]

等号とメソッド本体を使用しない場合、メソッドは_abstract_として暗黙的に宣言されます。

関数定義

Scala関数の定義には次の形式があります-

構文

def functionName ([list of parameters]) : [return type] = {
   function body
   return [expr]
}

ここで、 return type は有効なScalaデータ型で、 list of parameters はコンマで区切られた変数のリストであり、パラメーターと戻り値のタイプのリストはオプションです。 Javaと非常によく似ており、関数が値を返す場合、式とともに return ステートメントを使用できます。 以下は、2つの整数を追加し、それらの合計を返す関数です-

構文

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

何も返さない関数は、Javaの void と同等の Unit を返すことができ、関数が何も返さないことを示します。 Scalaで何も返さない関数は、プロシージャと呼ばれます。

構文

ここに構文があります-

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

関数を呼び出す

Scalaは、メソッドを呼び出すための多くの構文バリエーションを提供します。 以下は、メソッドを呼び出す標準的な方法です-

functionName( list of parameters )

オブジェクトのインスタンスを使用して関数が呼び出されている場合、次のようにJavaに似たドット表記を使用します-

[instance.]functionName( list of parameters )

次のプログラム例を試して、同じ関数を定義して呼び出します。

object Demo {
   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
   }
}

上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。

コマンド

\>scalac Demo.scala
\>scala Demo

出力

Returned Value : 12

Scala関数はScalaプログラミングの中心であり、そのためScalaは関数型プログラミング言語として想定されています。 以下は、Scalaプログラマーが理解すべきScala関数に関連する重要な概念です。

Functions Call-by-Name Functions with Named Arguments
Function with Variable Arguments Recursion Functions
Default Parameter Values Higher-Order Functions
Nested Functions Anonymous Functions
Partially Applied Functions Currying Functions