跳转到内容

Kotlin函数参数

来自代码酷

模板:Note

Kotlin函数参数[编辑 | 编辑源代码]

Kotlin函数参数是函数定义中用于接收外部数据的变量,支持默认值、命名参数、可变参数等高级特性。本节将全面讲解参数传递机制及其应用场景。

基础参数定义[编辑 | 编辑源代码]

Kotlin使用帕斯卡表示法定义参数,格式为:

fun 函数名(参数名: 参数类型, ...): 返回类型 {
    // 函数体
}

示例:基本参数传递

fun greet(name: String, age: Int) {
    println("Hello $name, you are $age years old")
}

fun main() {
    greet("Alice", 25)  // 输出: Hello Alice, you are 25 years old
}

参数高级特性[编辑 | 编辑源代码]

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

参数可以指定默认值,当调用方未提供时自动使用默认值:

fun connect(
    host: String = "localhost",
    port: Int = 8080,
    useSSL: Boolean = false
) {
    println("Connecting to $host:$port (SSL: ${if (useSSL) "Yes" else "No"})")
}

fun main() {
    connect()  // 使用全部默认值
    connect(port = 9000)  // 只覆盖port参数
}

命名参数[编辑 | 编辑源代码]

调用时可指定参数名,提高可读性且允许任意顺序:

fun createUser(
    name: String,
    email: String,
    age: Int = 18,
    isAdmin: Boolean = false
) { /*...*/ }

fun main() {
    createUser(
        email = "user@example.com",
        name = "Bob",
        isAdmin = true
    )
}

可变数量参数(vararg)[编辑 | 编辑源代码]

使用vararg修饰符定义可变参数:

fun sum(vararg numbers: Int): Int {
    return numbers.sum()
}

fun main() {
    println(sum(1, 2, 3))  // 输出: 6
    val arr = intArrayOf(4, 5, 6)
    println(sum(*arr))      // 使用展开运算符
}

参数传递机制[编辑 | 编辑源代码]

Kotlin参数始终按值传递,但对于对象引用传递的是引用的拷贝:

graph LR A[调用方] -->|传递值| B[基本类型] A -->|传递引用拷贝| C[对象类型] C --> D[原始对象]

示例说明:

data class MutableData(var value: Int)

fun modifyPrimitive(num: Int) {
    num = 10  // 编译错误,val参数不可修改
}

fun modifyObject(data: MutableData) {
    data.value = 100  // 修改对象属性
}

fun main() {
    val number = 5
    val data = MutableData(1)
    modifyObject(data)
    println(data.value)  // 输出: 100
}

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

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

class DatabaseConfig(
    val url: String,
    val username: String,
    val poolSize: Int = 10,
    val timeout: Int = 5000
) {
    // 构建逻辑...
}

fun createDatabase(
    url: String,
    configure: DatabaseConfig.() -> Unit
) {
    val config = DatabaseConfig(url, "admin").apply(configure)
    // 使用配置创建数据库
}

fun main() {
    createDatabase("jdbc:mysql://localhost") {
        poolSize = 20
        timeout = 3000
    }
}

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

使用默认参数简化调用:

fun calculateCompoundInterest(
    principal: Double,
    rate: Double,
    years: Int = 1,
    compoundPerYear: Int = 1
): Double {
    return principal * Math.pow(
        1 + rate / compoundPerYear,
        (compoundPerYear * years).toDouble()
    )
}

fun main() {
    println(calculateCompoundInterest(1000.0, 0.05))  // 默认1年
    println(calculateCompoundInterest(1000.0, 0.05, years = 10))
}

参数类型进阶[编辑 | 编辑源代码]

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

Kotlin支持将函数作为参数传递:

fun processNumbers(
    numbers: IntArray,
    processor: (Int) -> Int
): List<Int> {
    return numbers.map(processor)
}

fun main() {
    val result = processNumbers(intArrayOf(1, 2, 3)) { it * it }
    println(result)  // 输出: [1, 4, 9]
}

泛型参数[编辑 | 编辑源代码]

参数类型可以使用泛型:

fun <T> printList(list: List<T>, prefix: String = "") {
    list.forEach { println("$prefix$it") }
}

fun main() {
    printList(listOf(1, 2, 3), "Num: ")
}

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

1. 优先使用不可变参数(默认val行为) 2. 相关参数超过3个时考虑使用数据类封装 3. 布尔参数建议使用命名参数明确意图 4. 避免可变参数与位置参数混用造成混淆

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

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