
第3章 使用函数
Kotlin并不坚持要为所有东西创建类。没有人会因为复制代码而受到赞扬,但是重用并不意味着构建类层次结构。与Java不同,类是最小的可重用部分,而在Kotlin中,独立的函数和类都可以重用。
Kotlin采用一种非常实用的方法来创建高质量的代码——在合适的地方,创建小且简单的独立函数,并在必要时将代码放入类的方法中。在本章中,我们将主要关注独立函数,原因有两个。首先,因为我们可以——也就是说,在Kotlin中,我们可以创建顶级的独立函数来重用代码,如果没有什么价值,就不必在类上浪费时间和精力。其次,函数的所有功能都直接用于创建类的方法——毕竟,方法只是在类或对象的上下文中运行的函数。因此,在使用脚本、过程代码﹑函数代码以及构建复杂的面向对象的代码时,你在这里学到的知识非常有用。
使用Kotlin,你不必把独立的函数伪装成类的静态方法——也就是说,你不必为了取悦语言而假装“面向对象”。如果适合你的应用程序,可以创建全局顶级函数,就像在C和C++等语言中那样。函数可以位于顶层,也可以直接位于包中——你自己决定将它们放置在何处。
Kotlin要求指定函数的参数类型,但是你可以要求它推断单表达式函数的返回类型。调用函数时,不需要为每个形参传递参数,相反,你可以选择使用默认参数。你可以使用此特性轻松地演化函数和方法。为了使对方法的调用具有表现力,Kotlin提供了为参数命名的能力。这大大提高了代码的可读性。此外,你可以向函数传递数量可变的参数,而不会丢失编译时安全性。Kotlin还具有解构能力,这提供了一种非常简洁的方法来将属性从对象提取到独立的变量中。
在本章中,你将学习如何使用全局函数或独立函数。我们将从Kotlin定义函数的规则开始,看它是如何将函数视为表达式的,然后研究许多有用的特性,包括默认参数、命名参数、定义可变数量的参数、spread(展开)运算符和使用解构。使用这些特性,你可以创建具有高度表现力的代码,这些代码易于阅读,维护起来也更加灵活。如果你对编写面向对象的代码更感兴趣,请确保你在这里所学到的概念也适用于类的方法。
让我们来试试函数。