Scala教學(四)函式

介紹完了參數與表達式,接下來今天要跟大家介紹 Scala 語法中,函式使用方式。

Quick Start

接下來將要分享我的Scala學習筆記,有任何建議與需要改進的地方,也請大家多多指教。

參考書籍Learning Scala

函式(Functions)

我們會將可以重複使用的程式包成一個函式。對 Scala 或是其他的 functional programming 來說 函式(Functions) 尤為重要。

我們來看以下範例吧:

  • 沒有參數的函式

    def <identifier> = <expression>

範例:

1
2
3
4
5
scala> def hi = "hi"
hi: String

scala> hi
res0: String = hi

  • 我們一樣可以定義函式的 return type

    def <identifier>: <type> = <expression>

1
2
scala> def hi: String = "hi"
hi: String
  • 定義一個函式

    def <identifier>(<identifier>: <type>[, … ]): <type> = <expression>

範例:

1
2
3
4
5
scala> def multiplier(x: Int, y: Int): Int = { x * y }
multiplier: (x: Int, y: Int)Int

scala> multiplier(3, 4)
res2: Int = 12

  • 定義一個有空括號的函式

    def <identifier>()[: <type>] = <expression>

範例:

1
2
3
4
5
6
7
8
scala> def hi(): String = "hi"
hi: ()String

scala> hi()
res3: String = hi

scala> hi
res4: String = hi

  • 在函式中,使用表達式區塊
    如:

    1
    2
    3
    4
    5
    6
    7
    8
    scala> def formatEuro(amt: Double) = f"€$amt%.2f"
    formatEuro: (amt: Double)String

    scala> formatEuro(3.4645)
    res5: String = €3.46

    scala> formatEuro { val rate = 1.32; 0.235 + 0.7123 + rate * 5.32 }
    res6: String = €7.97
  • 呼叫函式時,可以將參數名稱帶入
    如:

    1
    2
    3
    4
    5
    6
    7
    8
    scala> def greet(prefix: String, name: String) = s"$prefix $name"
    greet: (prefix: String, name: String)String

    scala> val greeting1 = greet("Mr.", "Chen")
    greeting1: String = Mr. Chen

    scala> val greeting2 = greet(name = "Chen", prefix = "Mr.")
    greeting2: String = Mr. Chen
  • 多個參數值(Vararg Parameters)
    如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    scala> def sum(items: Int*): Int = {
    | var total = 0
    | for(i <- items) total += i
    | total
    | }
    sum: (items: Int*)Int

    scala> sum(1, 2, 3)
    res0: Int = 6
  • 參數群組(Parameter Groups)
    Scala 提供了將參數分成群組的概念

範例:

1
2
3
4
5
scala> def max(x: Int)(y: Int) = if (x > y) x else y
max: (x: Int)(y: Int)Int

scala> val larger = max(20)(50)
larger: Int = 50

這次就先到這邊喔!有問題歡迎寄信給我一起討論喔!~

謝謝您的支持與鼓勵

Ads