3.5 自适应的默认做法
Scala有一些默认做法,会让代码更简洁、更易读写。下面列了几个这样的特性:
它支持脚本,无需将所有的代码都放到类里。如果脚本可以满足需求,就把可执行代码直接放到文件里,而不必弄出一个没必要的垃圾类。
return
是可选的。方法调用会自动返回最后求值的表达式,假定它符合方法声明的返回类型。不显式地放置return
会使代码更简洁,特别是传闭包做方法参数时。分号(
;
)是可选的。不必在每个语句的后面都写上分号⑤,这会使代码更简洁。如果想在同一行内放多条语句,可以用分号进行分隔。Scala很聪明,能识别出语句是否完整,如果语句包含多行可以在下一行继续输入。
⑤参见3.7节,“分号是半可选的”。
类和方法默认是
public
,因此不必显式使用public
关键字。Scala提供了轻量级的语法创建JavaBean——用更少的代码创建变量和
final
属性(参见4.1节,“创建类”)。不会强制捕获一些不关心的异常(参见13.1节,“异常处理”),降低了代码规模,也避免了不恰当的异常处理。
另外,默认情况下,Scala会导入两个包和scala.Predef
对象,以及相应的类和成员。只要用类名,就可以引用这些预导入的包。Scala按如下顺序将内容全部导入:
java.lang
scala
scala.Predef
包含java.lang
让你无需在脚本中导入任何东西就可以使用常用的Java类型。比如,使用String
时,无需加上java.lang
的包名,也不必导入。
因为scala
包中的所有内容都导入了,所以也可以很容易地使用Scala的类型。
Predef
对象包含了类型,隐式转换,以及Scala中常用的方法。既然这些类是默认导入的,不需要任何前缀,也无需导入,即可使用这些方法和转换。这些操作非常便捷,以至于刚开始,你会把它们当作是语言的一部分,实际上,它们是Scala程序库的一部分。
Predef
对象也为诸如scala.collection.immutable.Set
和scala.collection. immutable.Map
这样的东西提供了别名。比如,引用Set
或Map
,实际上引用的是他们在Predef
中的定义,它们会依次转换为其在scala.collection.immutable
包里的定义。