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.Setscala.collection. immutable.Map这样的东西提供了别名。比如,引用SetMap,实际上引用的是他们在Predef中的定义,它们会依次转换为其在scala.collection.immutable包里的定义。