Kotlin基础篇之 ‌默认参数

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 设计并降低维护成本。

相关推荐
QING6181 小时前
Kotlin Random.Default用法及代码示例
android·kotlin·源码阅读
QING6181 小时前
Kotlin Byte.inc用法及代码示例
android·kotlin·源码阅读
QING6181 小时前
Kotlin contentEquals用法及代码示例
android·kotlin·源码阅读
高林雨露12 小时前
Java 与 Kotlin 对比示例学习(三)
java·kotlin
lc99910212 小时前
基于kotlin native的C与kotlin互相调用
开发语言·kotlin
每次的天空1 天前
Kotlin 作用域函数:apply、let、run、with、also
android·开发语言·kotlin
QING6181 天前
Kotlin containsAll用法及代码示例
android·kotlin·源码阅读
QING6181 天前
Kotlin 协程库中 StateFlow 与 SharedFlow 的区别与使用指南
android·kotlin·app
QING6181 天前
Kotlin component2用法及代码示例
android·kotlin·源码阅读
jiet_h1 天前
深入解析Kapt —— Kotlin Annotation Processing Tool 技术博客
android·开发语言·kotlin