Kotlin函数参数
外观
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参数始终按值传递,但对于对象引用传递的是引用的拷贝:
示例说明:
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没有内容。
可变参数必须作为最后一个参数声明,否则会导致编译错误 |