Kotlin函数调用
外观
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
性能考虑[编辑 | 编辑源代码]
通过流程图说明调用过程:
与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没有内容。
在Android API <24上,默认参数会生成额外方法可能导致方法数限制问题,需使用 @JvmOverloads
|