跳到主要内容

Kotlin 默认参数和命名参数

提示
  1. Kotlin 默认参数:在 Kotlin 函数中,可以为参数指定默认值。如果在调用函数时未传递参数,将使用这些默认值。
  2. 命名参数的使用:Kotlin 允许通过指定参数名称来传递参数,这有助于解决参数顺序问题,尤其是在只想提供某些默认参数的值时。
  3. 示例中的应用:示例展示了如何通过默认参数和命名参数的使用,来灵活调用函数,增强代码的可读性和灵活性。

Kotlin 默认参数

在 Kotlin 中,你可以在函数定义中为参数提供默认值。

如果调用函数时传递了参数,那么这些参数将作为实际参数使用。但是,如果调用函数时没有传递参数,将使用默认参数。

默认参数如何工作?

[情况 I:传递了所有参数

向函数传递了两个参数 函数 foo() 需要两个参数。这些参数被提供了默认值。然而,在上面的程序中,调用 foo() 时传递了两个参数。因此,不使用默认参数。

foo() 函数内部,letternumber 的值分别将是 'x'2

[情况 II:没有传递所有参数

没有向函数传递所有参数

这里,只传递了一个(第一个)参数给 foo() 函数。因此,第一个参数使用传递给函数的值。然而,第二个参数 number 将采用默认值,因为在函数调用时没有传递第二个参数。

foo() 函数内部,letternumber 的值分别将是 'y'15

[情况 III:没有传递参数

没有向函数传递任何参数 这里,调用 foo() 函数时没有传递任何参数。因此,两个参数都使用其默认值。

foo() 函数内部,letternumber 的值分别将是 'a'15

示例:Kotlin 默认参数

fun displayBorder(character: Char = '=', length: Int = 15) {
for (i in 1..length) {
print(character)
}
}

fun main(args: Array<String>) {
println("没有传递参数时的输出:")
displayBorder()

println("\n\n使用 '*' 作为第一个参数。")
println("传递第一个参数时的输出:")
displayBorder('*')

println("\n\n使用 '*' 作为第一个参数。")
println("使用 '5' 作为第二个参数。")
println("传递两个参数时的输出:")
displayBorder('*', 5)

}

当你运行程序时,输出将是:

没有传递参数时的输出:
===============

使用 '*' 作为第一个参数。
传递第一个参数时的输出:
***************

使用 '*' 作为第一个参数。
使用 '5' 作为第二个参数。
传递两个参数时的输出:
*****

Kotlin 命名参数

在讨论命名参数之前,让我们考虑对上述代码的一点修改:

fun displayBorder(character: Char = '=', length: Int = 15) {
for (i in 1..length) {
print(character)
}
}

fun main(args: Array<String>) {
displayBorder(5)
}

这里,我们尝试向 displayBorder() 函数传递第二个参数,并使用默认参数作为第一个参数。然而,这段代码会产生错误。这是因为编译器认为我们试图提供 5(Int 类型的值)给 character(Char 类型)。

为了解决这个问题,可以使用命名参数。以下是如何操作:

示例:Kotlin 命名参数

fun displayBorder(character: Char = '=', length: Int = 15) {
for (i in 1..length) {
print(character)
}
}

fun main(args: Array<String>) {
displayBorder(length = 5)
}

当你运行程序时,输出将是:

=====

在上述程序中,我们使用了命名参数(length = 5)指定函数定义中的 length 参数应该取这个值(不管参数的位置如何)。

![Kotlin 中的命名参数](img/named-argument-kotlin-programming