Kotlin 函数与 Lambda 表达式

发布于:2025-07-02 ⋅ 阅读:(24) ⋅ 点赞:(0)

今天继续分享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.0
    println(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)中非常强大。
默认参数和命名参数能让函数更灵活,减少重载函数的编写。