定義函數

Kotlin 中的函數比 Java 中的方法更靈活,用途更廣,功能更強。

完整的定義方式是:

[訪問控制符] [修飾符] fun [<泛型標識符>] [擴展接收類型.]函數名([參數列表])[: 返回值類型]{
  函數體}

共 9 部分:

  1. [訪問控制符]:可省略。

    Kotlin 中的訪問控制符有四個:public 、protected 、internal 、private,如果沒有聲明,則默認爲 public。這些訪問控制符之後會詳細講。

  2. [修飾符]:可省略。

    這些修飾符會給函數添加不同的功能,包括 infix 和 inline,之後會詳細講。

  3. fun:不可省略。

    這是用來聲明函數的關鍵字,是英語 Function(函數)的縮寫。

  4. 函數名:不可省略。

    與 Java 方法名一樣,遵循駱峯式的命名法。

  5. [<泛型標識符>]:可省略。

    與 Java 類似,如果返回值包含泛型,則需要在這裏將函數標記爲泛型函數。

    //定義一個函數,輸入一個元素,輸出一個只包含這個元素的 Listfun <T> singletonList(item: T): List<T> = listOf(item)
  6. [擴展接收類型.]:可省略。

    定義擴展函數時使用,後面會詳解

  7. [參數列表]:可省略。

    每個參數都使用“形參名: 形參類型”的形式,這裏的形參類型是不能省略的。更多特性見下面的詳解。

  8. [: 返回值類型]:可省略。

    返回值類型可以是 Kotlin 和 Java 中的引用數據類型。

    如果一個函數沒有返回值,則它的返回值類型是 Unit,一般會省略。

    //這裏的 :Unit 一般省略fun sayHello(name: String): Unit = println("My name is ${name}.")

    如果返回值類型可以由單句的函數體推斷出來,則可以省略返回值類型。

    //推斷出返回值類型是 Double,可以省略 :Double 聲明fun multiply(a: Double, b: Double) = a * b
  9. {函數體}:不可省略。

    函數體定義函數的行爲,如果函數體只有一句,可以寫成“= 函數體”的形式(這時就像定義一個變量了)。

    //簡短的寫法:fun add(a: Int, b: Int) = a + b//完整的寫法:fun add(a: Int, b: Int): Int {return a + b}

參數列表詳解:

  1. 默認參數。

    Kotlin 中的函數可以聲明一個參數的默認值,在沒有對應值輸入時自動取默認值,大大減少了方法重載。

    //輸入兩個或三個 Int 變量,返回它們的和fun add(a: Int, b: Int, c: Int = 0) = a + b + cprintln(add(3, 1)) //默認 c 爲 0,輸出 4println(add(3, 1, 2)) //輸入 c 值,不使用默認值,輸出 6
  2. 可變數量參數。

    使用 vararg 修飾參數列表的最後一項,表示這個參數的數量是可變的,與 Java 中的“形參類型.. 形參名”相同。

    注意:標記爲 vararg 的參數,在函數內表現爲對應類型的數組。

    //輸入最少兩個 Int 類型變量,返回它們的和fun add(a: Int, b: Int, vararg n: Int): {
        var sum = a + b
     // n 是 IntArray 類型,i 自動推斷爲 Int 類型,使用 in 遍歷 n 中的元素
        for (i in n) {
          sum += i
        }
        return sum}

Kotlin


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章