iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
Software Development

成為一名 Kotlin 後端攻城獅系列 第 14

Day 14 Kotlin 函式介紹 (2)

  • 分享至 

  • xImage
  •  

祝大家中秋佳節快樂~

昨天大致上介紹了基本的函式定義方法,今天要來說的是讓 Koltin 更強大的匿名函式 (包含Lambda 函式)、擴充函式。

  • 匿名函式:可以使用匿名函式來定義沒有函式名稱的函式,並將其作為參數傳遞或返回。例如,我們可以定義一個匿名函式 sum,用於計算兩個數字的和。

    val sum = fun(x: Int, y: Int): Int {
        return x + y
    }
    
  • Lambda 函式:一種匿名函式的寫法,不同於一般匿名函式,省 fun 直接使用大括弧定義函式傳入以及回傳行為,下面是一個使用 Lambda 表達式完成上面的功能的範例:

    val sum = { x: Int, y: Int -> x + y }
    

    在這個例子中,{ x: Int, y: Int -> x + y } 就是一個 Lambda 表達式,表示接受兩個 Int 型參數 xy,並返回它們的和。

    Lambda 函式也可以作為函式的參數,例如在 filter 函式中使用 Lambda 函式:

    ints.filter { item -> item > 0 }
    

    這個例子中,{ item -> item > 0 } 就是一個 Lambda 表達式,用於過濾 ints 列表中大於 0 的元素。

    一般的匿名函式也可以作為函式的參數,如下:

    ints.filter(fun(item) = item > 0)
    
  • 擴充函式:允許在不修改原始型別程式碼的情況下新增函式的方法。這個功能提供了一種擴充外部庫或原生 Kotlin 型別功能的方式。

    要擴充函式,需要先指定要擴充的型別,後跟一個點和擴充函式名。在擴充函式的內部,可以使用 this 關鍵字調度原始型別裡所帶的內容(值)。

    以下是一範例為 String 型別新增一個 reverse 函式,目標是反轉原本 String 型別的字串:

    fun String.reverse(): String {
        return this.reversed()
    }
    

    通過這個擴充函式,現在就可以在任何 String 對象上呼叫 reverse 函式:

    val str = "Hello, World!"
    val reversedStr = str.reverse()
    println(reversedStr) // 輸出: "!dlroW ,olleH"
    

    擴充函式也可以有參數,這樣可以進一步靈活賦予它們的行為。以下是一個將字串截斷到指定的長度的範例:

    fun String.truncate(length: Int): String {
        return if (this.length > length) {
            "${this.substring(0, length)}..."
        }
    
    
    val longStr = "This is a long string that needs to be truncated"
    val truncatedStr = longStr.truncate(10)
    println(truncatedStr) // Output: "This is a..."
    
    

    此外,我們也可以對一個集合型別建立一個擴充函式,如下是對一個字串列表輸出所有元素的長度:

    fun List<String>.getLength(): List<Int> =
    	this.map { str ->   // 這裡的 str 是指列表中的單一個字串元素 
    		str.size()
    	}
    

    參考資料


上一篇
Day 13 Kotlin 函式介紹 (1)
下一篇
Day 15 Kotlin 中的類別 (1)
系列文
成為一名 Kotlin 後端攻城獅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言