Kotlin也是面向表达式的语言。在Kotlin中所有控制流语句都是表达式(除了变量赋值、异常等)。
Kotlin中的 Unit 类型实现了与Java中的 void 一样的功能。不同的是,当一个函数没有返回值的时候,我们用 Unit 来表示这个特征,而不是 null 。
大多数时候,我们并不需要显式地返回 Unit(因为编译器会隐式地加上return Unit) ,或者声明一个函数的返回类型为 Unit 。编译器会推断出它。
Unit源码如下
public object Unit {
override fun toString() = "kotlin.Unit"
}
示例
fun main(args: Array<String>) {
val ur1=unitReturn1()
val ur2=unitReturn2()
val ur3=unitReturn3()
val ur4=unitReturn4()
println(ur1)//kotlin.Unit
println(ur2)//kotlin.Unit
println(ur3)//kotlin.Unit
println(ur4)//kotlin.Unit
}
//下面的几种方法是等价的
fun unitReturn1() {
}
fun unitReturn2() {
return Unit
}
fun unitReturn3(): Unit {
}
fun unitReturn4(): Unit = Unit
为什么我们选择使用一个不一样的名字Unit 而不是把它叫作Void 。在函数式编程语言中,Unit这个名字习惯上被用来表示“只有一个实例”,这正是Kotlin 的Unit 和Java 的void 的区别。我们本可以沿用Void 这个名字,但是Kotlin还有一个叫作Nothing 的类型,它有着完全不同的功能。Void 和Nothing 两种类型的名字含义如此相近,会令人困惑。接下来,我们来学习一下Kotlin中的Nothing。