
3.1.3 所有的函数都是表达式
正如你在2.7节中所看到的,Kotlin更喜欢表达式而不是语句。基于这个原则,函数必须视为表达式而不是语句来处理,我们可以很好地组合一系列调用,来对每个调用的返回值调用方法。
Kotlin使用一种称为Unit的特殊类型,其对应于Java的void类型。Unit这个名字来自类型理论,它表示一个不包含任何信息的单例。你可以始终使用Unit来指定不返回任何有用的内容。此外,如果函数没有返回任何内容,Kotlin将把类型推断为Unit。让我们先来看看这个推论。

sayHello()函数使用println()在标准输出中打印一条消息,我们知道它在Java中是一个void函数,但在Kotlin中它返回Unit。我们对sayHello()的返回类型使用类型推断,但是要确保它被推断为Unit。我们通过将sayHello()的结果赋值给String类型的变量来验证推断出的类型,但由于类型不匹配,编译将失败。
我们也可以显式地指定Unit作为返回类型,而不是使用类型推断。让我们对sayHello()进行修改来指定返回类型,然后将结果赋值给一个类型为Unit的变量:


因为即使是void函数在Kotlin中也返回Unit,所以所有的函数都可以当作表达式,我们可以对任何函数的结果调用方法。Unit类型有toString()、equals()和hashCode()方法。虽然不是很有用,但你可以调用这些方法中的任何一个。例如,在前面的代码中,我们将类型为Unit的消息变量传递给println(),该变量在内部调用Unit的toString()方法。让我们来看看输出:

Unit的toString()方法只返回一个值为kotlin.Unit的字符串,是类的全称。
因为所有的函数都返回一些有用的信息,或者至少一个Unit,所以它们都用作表达式,结果可能分配给一个变量或用于进一步的处理。
到目前为止,我们在本章中使用的函数没有接受任何参数,但实际上函数通常接受参数。现在让我们关注定义参数并将参数传递给函数。