Unit类型和Nothing类型区别
- Unit类型 :在kotlin方法创建中,表示方法没有返回值,相当于java中的void,有些时候是可以省略不写,函数是正常返回的,例如:
fun main(args: Array<String>) {
}
- Nothing类型:Nothing是kotlin中提供的一种特殊的数据类型,只用于函数返回类型的声明,不能用于变量声明,Nothing声明的函数永远不会正常返回,只会抛出异常。
使用命名参数调用函数
为了提高函数调用的可读性,在函数调用时可以采用命名参数调用。采用命名参数调用函数声明时不需要做额外工作。
fun main(args: Array<String>) {
printArea(90.0 , 90.0)
printArea(width = 39.0 ,height = 90.0)
printArea(90.0,height = 90.0)
printArea(height = 90.0 , width = 90.0)
printArea(width = 90.0, 90.0)
}
fun printArea(width:Double,height:Double){
val area = width * height
print("$width * $height 的长方形面积为: $area")
}
编辑器效果:
可以看出,在使用命名参数调用时,一旦其中一个参数使用命名参数形式传递,则其后的所有参数都需要采用命名参数传递的方式,除非这个参数是最后一个参数,否则会有编译错误!
函数参数默认值
在声明函数时可以为其参数设置默认值,当函数调用时可以忽略该参数:
fun main(args: Array<String>) {
buyCar()
buyCar("大众")
}
fun buyCar(carName: String = "本田") {
println("想买的汽车品牌是:$carName")
}
代码运行效果:
可变参数
kotlin函数的参数的个数可以变化的,它可以接受不确定数量的输入类型的参数(这些参数具有相同的类型),在声明该函数时可使用vararg关键来指定可变参数;例如:
fun main(args: Array<String>) {
println(sum())
println(sum(20.0))
println(sum(20.0, 30.0))
println(sum(20.0, 30.0, 40.0))
println(sum(20.0, 30.0, 40.0, 60.0))
}
fun sum(vararg numbers: Double): Double {
var total = 0.0
for (number in numbers) {
total += number
}
return total
}
运行项目查看结果:
还有就是涉及到函数如参数不止可变参数一种,例如:
fun main(args: Array<String>) {
println(result(mu = 1))
println(result(20.0 ,mu = 1))
println(result(20.0, 30.0,mu = 1))
println(result(20.0, 30.0, 40.0,mu = 1))
println(result(20.0, 30.0, 40.0, 60.0,mu = 1))
}
fun result(vararg numbers: Double , mu :Int): Double {
var total = 0.0
for (number in numbers) {
total += number
}
return total * mu
}
运行结果:
匿名函数
Kotlin中可以使用匿名函数,匿名函数不需要函数名,需要fun关键字声明,还需要参数列表和返回值类型声明,函数体包含必要的return语句。
fun main(args: Array<String>) {
println(result(3, 2, '+'))
println(result(3, 2, '-'))
}
fun result(n1: Int, n2: Int, opr: Char): Int {
val resultFun = if (opr == '+')
fun(a: Int, b: Int): Int {
return a + b
}
// fun(a: Int, b: Int): Int = a + b
else
fun(a: Int, b: Int): Int = a - b
return resultFun(n1, n2)
}
运行代码结果: