Kotlin 的 默认参数(Default Arguments) 允许在函数定义时为参数指定默认值,从而简化函数调用,减少重载函数的冗余代码
1、基本语法
在函数参数后使用 = 默认值
定义默认参数:
kotlin
kotlinCopy Code
fun greet(name: String = "Guest", age: Int = 18) {
println("Hello, $name! You are $age years old.")
}
2、调用方式
2.1. 省略有默认值的参数
调用时可省略已定义默认值的参数:
scss
kotlinCopy Code
greet() // 输出:Hello, Guest! You are 18 years old.
greet("Alice") // 输出:Hello, Alice! You are 18 years old.
greet("Bob", 25) // 输出:Hello, Bob! You are 25 years old.
//greet(25) 不能这样写,只默认首个,可以
greet(age = 25)
2.2 命名参数指定特定参数
通过命名参数跳过中间有默认值的参数:
scss
greet(age = 20) // 输出:Hello, Guest! You are 20 years old.
greet(age = 30, name = "Charlie") // 输出:Hello, Charlie! You are 30 years old.
3、规则与限制
3.1. 参数顺序
-
默认参数可以定义在参数列表的任意位置,但需遵循以下规则:
- 调用时若省略某个参数,其后的所有参数必须通过命名指定。
- 推荐将默认参数放在参数列表末尾,以简化调用。
示例:
kotlin
kotlinCopy Code
// 默认参数在前(需谨慎)
fun connect(
timeout: Int = 5000,
retries: Int,
url: String = "https://default.com"
) { /* ... */ }
// 正确调用方式
connect(retries = 3) // timeout=5000, url=默认值
connect(timeout = 2000, retries = 5) // url=默认值
3.2. 默认值类型
- 默认值可以是常量、表达式或函数调用:
kotlin
kotlinCopy Code
fun calculate(
a: Int = 10,
b: Int = (1..10).random() // 每次调用生成随机默认值
) { /* ... */ }
3.3. 与构造函数结合
构造函数也支持默认参数:
ini
kotlinCopy Code
class User(
val name: String = "Anonymous",
val role: String = "Guest"
)
val user1 = User() // name="Anonymous", role="Guest"
val user2 = User(role = "Admin") // name="Anonymous", role="Admin"
4、最佳实践
4.1. 优先将默认参数放在末尾 :
避免调用时强制使用命名参数,提高代码可读性。
4.2. 避免过多默认参数 :
若参数过多(如超过 4 个),考虑使用 Builder 模式或数据类封装参数。
4.3. 明确命名参数 :
当需要跳过中间参数时,使用命名参数消除歧义:
scss
```
kotlinCopy Code
// 不推荐:容易混淆参数顺序
sendMessage("Hello", 5000)
// 推荐:明确指定参数名
sendMessage(message = "Hello", timeout = 5000)
```
4.4. 注意默认值的副作用 :
默认值在每次函数调用时重新计算:
kotlin
```
kotlinCopy Code
fun logEvent(event: String, timestamp: Long = System.currentTimeMillis()) {
println("[$timestamp] $event")
}
// 每次调用 timestamp 都会更新
```
5、示例场景
5.1 配置函数
简化可选配置项的传递:
kotlin
kotlinCopy Code
fun createRequest(
method: String = "GET",
headers: Map<String, String> = emptyMap(),
body: String? = null
) { /* ... */ }
// 调用
createRequest() // 默认 GET 请求
createRequest("POST", body = "data") // 指定部分参数
5.2 工具函数
减少重复代码:
kotlin
kotlinCopy Code
fun formatText(
text: String,
maxLength: Int = 100,
ellipsis: String = "..."
): String {
return if (text.length > maxLength)
text.take(maxLength) + ellipsis
else text
}
// 调用
formatText("A very long text here") // 默认截断到100字符并添加...
formatText("Short", maxLength = 50) // 自定义截断长度
总结
Kotlin 的默认参数通过以下方式提升代码质量:
- 减少重载函数:避免编写多个相同逻辑的函数。
- 增强灵活性:支持选择性覆盖参数。
- 提高可读性:命名参数使调用意图更明确。
合理使用默认参数,可以显著简化 API 设计并降低维护成本。