在函数中返回单元的目的是什么?

从Kotlin文档:

如果一个函数没有返回任何有用的值,它的返回类型是Unit。 单位是只有一个值的类型 – 单位。价值。 这个值不必显式返回:

fun printHello(name : String?) : Unit { if (name != null) print("Hello, $name!") else print("Hi there!") // We don't need to write 'return Unit.VALUE' or 'return', although we could } 

在函数中返回单元的目的是什么? 为什么VALUE在那里? 这是什么VALUE?

目的与C或Java的void 。 只有单位是一个适当的类型,所以它可以作为一个通用的参数传递等。

  1. 为什么我们不把它称为“虚无”:因为“无效”这个词的意思是“无”,还有另一种类型, Nothing ,这意味着只是“没有价值”,即计算没有正常完成(永远循环或抛出一个例外)。 我们承受不了意义的冲突。

  2. 为什么Unit有一个值(即与Nothing不相同):因为通用代码可以顺利工作。 如果传递一个通用参数T的Unit,则为任何T写的代码将会期望一个对象,并且必须有一个对象,即Unit的唯一值。

  3. 如何访问单元的值:因为它是一个单例对象,所以说Unit

单位存在的主要原因是因为通用原因。 我们使用Kotlin文档中的示例。

 class Box<T>(t: T) { var value = t } 

我们可以有

 var box = Box(Unit) 

这就是为什么Unit会返回一个值,所以Kotlin可以从传入类初始化的类型中推断出它。 当然,你也可以这样写,

 var box = Box<Unit>(Unit) 

但都一样,它必须有一个返回值。 现在,Kotlin中Java的void关键字是Nothing没有什么是Kotlin类型层次结构中的最后一个类型,最后一个是Nothing? (无空)。 这根本不会返回任何值。 因为它根本没有返回任何值,所以我们不能把它作为上面代码中的一个类型来传递。

 var box = Box(Nothing) //This will return an Error