今天繼續分享Kotlin學習內容。
目標:掌握函數定義、調用、參數傳遞,以及 Lambda 表達式的基礎用法
1. 函數:Kotlin 的代碼模塊化工具
定義:函數是可重復調用的代碼塊,用于封裝邏輯。
語法:
fun 函數名(參數列表): 返回類型 {// 函數體return 結果 // 可省略(若表達式函數或返回類型可推斷)
}
示例 1:基礎函數
fun greet(name: String): String {return "Hello, $name!"
}fun main() {println(greet("Alice")) // 輸出: Hello, Alice!
}
示例 2:無返回值函數(Unit 類型可省略)
fun printMessage(message: String) {println("Message: $message")
}fun main() {printMessage("Kotlin is fun!") // 輸出: Message: Kotlin is fun!
}
示例 3:默認參數與命名參數
fun calculateArea(width: Double, height: Double = 10.0): Double {return width * height
}fun main() {println(calculateArea(5.0)) // 使用默認 height: 輸出 50.0println(calculateArea(5.0, 20.0)) // 覆蓋默認值: 輸出 100.0
}
2. Lambda 表達式:輕量級匿名函數
定義:Lambda 是沒有名稱的函數,通常用于簡化代碼。
語法:
{ 參數列表 -> 函數體 }
示例 1:Lambda 基礎
fun main() {val greetLambda: (String) -> String = { name -> "Hi, $name!" }println(greetLambda("Bob")) // 輸出: Hi, Bob!
}
示例 2:Lambda 作為函數參數
fun processString(input: String, transform: (String) -> String): String {return transform(input)
}fun main() {val result = processString("kotlin") { it.uppercase() } // 參數名用 it 隱式表示println(result) // 輸出: KOTLIN
}
示例 3:高階函數與 Lambda 結合
fun operateOnNumbers(a: Int, b: Int, operation: (Int, Int) -> Int): Int {return operation(a, b)
}fun main() {val sum = operateOnNumbers(3, 5) { x, y -> x + y } // 加法val product = operateOnNumbers(3, 5) { x, y -> x * y } // 乘法println("Sum: $sum, Product: $product") // 輸出: Sum: 8, Product: 15
}
3. 函數 vs Lambda:何時使用?
函數:
需要復用邏輯時。
邏輯復雜,需多行代碼時。
Lambda:
邏輯簡單,僅需一次使用時。
作為參數傳遞給高階函數時(如 map, filter)。
4. 今日練習建議
最后來練習一下吧
任務 1:定義一個函數 calculateDiscount(price: Double, discount: Double): Double,返回折扣后的價格。
任務 2:用 Lambda 表達式重寫 calculateDiscount,并調用它。
任務 3:編寫一個高階函數 applyOperation,接受兩個數字和一個 Lambda 操作(如加法、減法),返回結果。
// 示例調用
val result = applyOperation(10, 5) { a, b -> a - b } // 輸出 5
挑戰題:用 Lambda 和 map 函數將一個字符串列表轉為大寫形式:
val names = listOf("alice", "bob", "charlie")
// 輸出: [ALICE, BOB, CHARLIE]
5. 常見錯誤提示
錯誤 1:Lambda 參數類型推斷失敗時,需顯式聲明類型:
val lambda: (Int, Int) -> Int = { a, b -> a + b } // 顯式聲明類型
錯誤 2:忘記 Lambda 的最后一個表達式是返回值(無 return 關鍵字)。
錯誤 3:混淆函數和 Lambda 的調用方式(函數直接寫名稱,Lambda 需賦值或傳遞)。
Lambda 是 Kotlin 的“瑞士軍刀”,尤其在集合操作(如 filter, map)中非常強大。
默認參數和命名參數能讓函數更靈活,減少重載函數的編寫。