Scala 函數(shù)

函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語(yǔ)句。 您可以把代碼劃分到不同的函數(shù)中。如何劃分代碼到不同的函數(shù)中是由您來(lái)決定的,但在邏輯上,劃分通常是根據(jù)每個(gè)函數(shù)執(zhí)行一個(gè)特定的任務(wù)來(lái)進(jìn)行的。

Scala 有函數(shù)和方法,二者在語(yǔ)義上的區(qū)別很小。Scala 方法是類的一部分,而函數(shù)是一個(gè)對(duì)象可以賦值給一個(gè)變量。換句話來(lái)說(shuō)在類中定義的函數(shù)即是方法。

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


函數(shù)聲明

Scala 函數(shù)聲明格式如下:

def functionName ([參數(shù)列表]) : [return type]

如果你不寫等于號(hào)和方法主體,那么方法會(huì)被隱式聲明為"抽象(abstract)",包含它的類型于是也是一個(gè)抽象類型。


函數(shù)定義

方法定義由一個(gè)def 關(guān)鍵字開(kāi)始,緊接著是可選的參數(shù)列表,一個(gè)冒號(hào)":" 和方法的返回類型,一個(gè)等于號(hào)"=",最后是方法的主體。

Scala 函數(shù)定義格式如下:

def functionName ([參數(shù)列表]) : [return type] = {
   function body
   return [expr]
}

以上代碼中 return type 可以是任意合法的 Scala 數(shù)據(jù)類型。參數(shù)列表中的參數(shù)可以使用逗號(hào)分隔。

以下函數(shù)的功能是將兩個(gè)傳入的參數(shù)相加并求和:

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

      return sum
   }
}

如果函數(shù)沒(méi)有返回值,可以返回為 Unit,這個(gè)類似于 Java 的 void, 實(shí)例如下:

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

函數(shù)調(diào)用

Scala 提供了多種不同的函數(shù)調(diào)用方式:

以下是調(diào)用方法的標(biāo)準(zhǔn)格式:

functionName( 參數(shù)列表 )

如果函數(shù)使用了實(shí)例的對(duì)象來(lái)調(diào)用,我們可以使用類似java的格式 (使用 . 號(hào)):

[instance.]functionName( 參數(shù)列表 )

以上實(shí)例演示了定義與調(diào)用函數(shù)的實(shí)例:

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
   }
}

執(zhí)行以上代碼,輸出結(jié)果為:

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

Scala也是一種函數(shù)式語(yǔ)言,所以函數(shù)是 Scala 語(yǔ)言的核心。以下一些函數(shù)概念有助于我們更好的理解 Scala 編程:

函數(shù)概念解析接案例
函數(shù)傳名調(diào)用(Call-by-Name) 指定函數(shù)參數(shù)名
函數(shù) - 可變參數(shù) 遞歸函數(shù)
默認(rèn)參數(shù)值 高階函數(shù)
內(nèi)嵌函數(shù) 匿名函數(shù)
偏應(yīng)用函數(shù) 函數(shù)柯里化(Function Currying)