
上QQ阅读APP看书,第一时间看更新
3.1.4 定义参数
像Haskell和F#这样的语言可以深入到函数中并推断参数的类型。就我个人而言,我不喜欢这样:更改函数的实现可能会导致参数类型的更改。这让我很不安。Kotlin坚持为函数和方法的参数指定类型。在参数名后面提供参数的类型,用:分隔。
让我们将greet()函数改为接受字符串类型的参数。

Kotlin中的类型规范具有一致的形式candidate : Type,其中candidate可以是以下形式之一:使用val或var的变量声明、指定返回类型的函数声明、函数参数和传递给catch块的参数。
虽然参数名的类型是必需的,但如果希望Kotlin推断出返回类型,则可以省略返回类型。如果有多个参数,请在括号中用逗号分隔。
在2.3节中,应该选择不变性而不是可变性,在定义局部变量时,Kotlin强迫你在val和var之间做出选择。但是在定义greet()函数时,我们没有为参数指定val或var。这是有充分理由的。
《Effective Java中文版(原书第3版)》[1][Blo18]建议程序员使用final,并尽可能选择不变性。Kotlin不希望我们在这里对函数和方法参数做出选择;它认为修改传递给函数的参数不是一个好主意。不能将参数称为val或var——它们是隐式的val,在函数或方法中更改参数值的任何努力都将导致编译错误。
到目前为止,我们已经看到了真正的短函数。让我们看看如何编写更复杂的函数。
[1] 本书中文版已由机械工业出版社出版,ISBN 978-7-111-61272-8。——编辑注