重拾Kotlin(13)-命名参数、默认参数值、可变参数、局部函
2019-05-30 本文已影响16人
业志陈
一、命名参数、默认参数值、可变参数
1.1、命名参数
为了增强代码的可读性,Kotlin 允许我们使用命名参数,即在调用某函数的时候,可以将函数参数名一起标明,从而明确地表达该参数的含义与作用,但是在指定了一个参数的名称后,之后的所有参数都需要标明名称
fun main(args: Array<String>) {
//错误,在指定了一个参数的名称后,之后的所有参数都需要标明名称
//compute(index = 110, "leavesC")
compute(index = 120, value = "leavesC")
compute(130, value = "leavesC")
}
fun compute(index: Int, value: String) {
}
1.2、默认参数值
可以在声明函数的时候指定参数的默认值,从而避免创建重载的函数
fun main(args: Array<String>) {
compute(24)
compute(24, "leavesC")
}
fun compute(age: Int, name: String = "leavesC") {
}
对于以上这个例子,如果按照常规的调用语法时,必须按照函数声明定义的参数顺序来给定参数,可以省略的只有排在末尾的参数
fun main(args: Array<String>) {
//错误,不能省略参数 name
//compute(24)
//compute(24,100)
//可以省略参数 value
compute("leavesC", 24)
}
fun compute(name: String = "leavesC", age: Int, value: Int = 100) {
}
如果使用命名参数,可以省略任何有默认值的参数,而且也可以按照任意顺序传入需要的参数
fun main(args: Array<String>) {
compute(age = 24)
compute(age = 24, name = "leavesC")
compute(age = 24, value = 90, name = "leavesC")
compute(value = 90, age = 24, name = "leavesC")
}
fun compute(name: String = "leavesC", age: Int, value: Int = 100) {
}
1.3、可变参数
可变参数可以让我们把任意个数的参数打包到数组中传给函数,Kotlin 的语法相比 Java 有所不同,改为通过使用 varage 关键字声明可变参数
例如,以下的几种函数调用方式都是正确的
fun main(args: Array<String>) {
compute()
compute("leavesC")
compute("leavesC", "叶应是叶")
compute("leavesC", "叶应是叶", "叶")
}
fun compute(vararg name: String) {
name.forEach { println(it) }
}
在 Java 中,可以直接将数组传递给可变参数,而 Kotlin 要求显式地解包数组,以便每个数组元素在函数中能够作为单独的参数来调用,这个功能被称为展开运算符,使用方式就是在数组参数前加一个 *
fun main(args: Array<String>) {
val names = arrayOf("leavesC", "叶应是叶", "叶")
compute(*names)
}
fun compute(vararg name: String) {
name.forEach { println(it) }
}
1.4、局部函数
Kotlin 支持在函数中嵌套函数,被嵌套的函数称为局部函数
fun main(args: Array<String>) {
compute("leavesC", "country")
}
fun compute(name: String, country: String) {
fun check(string: String) {
if (string.isEmpty()) {
throw IllegalArgumentException("参数错误")
}
}
check(name)
check(country)
}