跳转到内容

Kotlin函数调用

来自代码酷

模板:Note

Kotlin函数调用[编辑 | 编辑源代码]

函数调用是执行函数中定义的操作的过程,在Kotlin中通过函数名和参数列表实现。Kotlin支持多种调用方式,包括标准调用、命名参数、默认参数、中缀调用等,并兼容Java的互操作性。

基础调用[编辑 | 编辑源代码]

最简单的调用形式是直接使用函数名和括号传递参数:

fun greet(name: String) {
    println("Hello, $name!")
}

fun main() {
    greet("Alice")  // 输出: Hello, Alice!
}

参数传递规则[编辑 | 编辑源代码]

  • 位置参数:按声明顺序传递
fun sum(a: Int, b: Int) = a + b
sum(3, 5)  // 输出: 8
  • 命名参数:明确指定参数名
sum(b = 5, a = 3)  // 输出: 8

高级调用方式[编辑 | 编辑源代码]

默认参数[编辑 | 编辑源代码]

允许省略有默认值的参数:

fun log(message: String, level: Int = 1) {
    println("[$level] $message")
}

log("Info")        // 输出: [1] Info
log("Error", 3)    // 输出: [3] Error

可变参数[编辑 | 编辑源代码]

使用

vararg

关键字:

fun printAll(vararg messages: String) {
    for (m in messages) println(m)
}

printAll("A", "B", "C")  // 输出三行: A \n B \n C

中缀函数[编辑 | 编辑源代码]

需满足以下条件: 1. 成员函数或扩展函数 2. 单参数

3. 使用

infix

修饰符

infix fun Int.add(x: Int) = this + x

fun main() {
    val result = 5 add 3  // 等同于5.add(3)
    println(result)       // 输出: 8
}

函数类型调用[编辑 | 编辑源代码]

Kotlin中函数是一等公民,可将函数赋值给变量:

val operation: (Int, Int) -> Int = ::sum
println(operation(2, 4))  // 输出: 6

Lambda调用[编辑 | 编辑源代码]

val square: (Int) -> Int = { x -> x * x }
println(square(4))  // 输出: 16

实际应用案例[编辑 | 编辑源代码]

配置构建器模式[编辑 | 编辑源代码]

利用命名参数和默认参数实现DSL:

class Config {
    var timeout: Int = 1000
    var retries: Int = 3
}

fun configure(block: Config.() -> Unit): Config {
    val config = Config()
    config.block()
    return config
}

val config = configure {
    timeout = 2000
    retries = 5
}

数学计算器[编辑 | 编辑源代码]

展示多种调用方式的组合:

fun calculate(
    op: Char,
    vararg numbers: Double,
    precision: Int = 2
): Double {
    require(numbers.isNotEmpty()) { "至少需要一个操作数" }
    val result = when(op) {
        '+' -> numbers.sum()
        '*' -> numbers.fold(1.0) { acc, d -> acc * d }
        else -> throw IllegalArgumentException("未知操作符")
    }
    return "%.${precision}f".format(result).toDouble()
}

// 调用示例
calculate('+', 1.5, 2.3, precision = 3)  // 输出: 3.800
calculate('*', 2.0, 3.0, 4.0)           // 输出: 24.00

性能考虑[编辑 | 编辑源代码]

通过流程图说明调用过程:

graph TD A[调用开始] --> B{是否内联函数?} B -->|是| C[直接插入函数体] B -->|否| D[创建调用栈帧] D --> E[参数压栈] E --> F[执行函数体] F --> G[返回结果]

与Java互操作[编辑 | 编辑源代码]

Kotlin调用Java方法时需注意:

  • 可变参数需用
    *
    
    展开操作符
  • 避免命名参数(Java字节码不保留参数名)
  • 处理空安全注解
// Java方法
public class JavaUtils {
    public static String join(String... parts) {
        return String.join(",", parts);
    }
}

// Kotlin调用
val parts = arrayOf("A", "B", "C")
JavaUtils.join(*parts)  // 输出: A,B,C

最佳实践[编辑 | 编辑源代码]

1. 优先使用命名参数增强可读性 2. 复杂参数组合使用默认参数 3. 超过3个参数考虑使用Builder模式

4. 高频调用的简单函数声明为

inline

5. 避免过度使用中缀表示法

页面模块:Message box/ambox.css没有内容。

参见[编辑 | 编辑源代码]