Scala 函數


函數是一組一起執行一個任務的語句。 您可以把程式碼劃分到不同的函數。如何劃分程式碼到不同的函數中是由您來決定的,但在邏輯上,劃分通常是根據每個函數執行一個特定的任務來進行的。

Scala 有函數和方法,二者在語意上的差異很小。 Scala 方法是類別的一部分,而函數是一個物件可以賦值給一個變數。換句話說在類別中定義的函數就是方法。

我們可以在任何地方定義函數,甚至可以在函數內定義函數(內嵌函數)。更重要的一點是 Scala 函數名稱可以由以下特殊字元:+, ++, ~, &,-, -- , \, /, : 等。


函數宣告

Scala 函數宣告格式如下:

def functionName ([参数列表]) : [return type]

如果你不寫等於號碼和方法主體,那麼方法會被隱含宣告為"抽象(abstract)",包含它的型別於是也是抽象型別。


函數定義

方法定義由一個def 關鍵字開始,緊接著是可選的參數列表,一個冒號":" 和方法的返回類型,一個等於號" =",最後是方法的主體。

Scala 函數定義格式如下:

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

以上程式碼中 return type 可以是任意合法的 Scala 資料型別。參數清單中的參數可以使用逗號分隔。

以下函數的功能是將兩個傳入的參數相加並求和:

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)
#######