Scala可以简洁地表示概念,有时甚至可以说过于简洁。
1、消除中间结果
在组合表达式中,最后一个表达式会变成整个表达式的结果。下面的例子中,值会被捕获到val result中,然后result从方法中返回。
与将值放到中间结果中不同,推导自身可以产生结果:
2、删除不必要的花括号
如果一个方法由单个表达式构成,那么环绕方法的花括号就是不是必须的
注意,之所以可以这样做是因为消除了中间结果,从而形成了单个表达式。
注意上的187和188 行是两个条件表达式,在推导内部的每个表达式都置于独立的行中。
3、移除不必要的参数
上面的第271行的匿名函数已经实现了某种程度的简洁性,:在参数列表中只有一个参数,因此无需圆括号,并在函数中只有一个函数,因此无需花括号。
第274行用了Scala特殊的下划线字符。到目前为止,只知道将下划线当作通配符使用的情况,但是当它成为方法调用的一部分时,下划线表示“填补这个空白”,而scala无需具名参数就可以为其传递每个字符。
第277行,由于只有一个参数要传递给print,而且scala看到print将接受一个char,所以scala允许采用极端简介的形式,将方法名作为参数传递给foreach,而且根本没有参数列表。
4、为返回类型使用类型推断
上面第275行就使用了Scala的类型推断,从而移除了返回类型。但是参数列表和方法体之间的=还是必须的。
5、用类型为名字起别名
在使用别人的代码时,可能会发现他们选择的名字太长或者太难用了,Scala允许使用type关键字对现有名称起一个新名字作为别名:
6、编程风格
没有参数的方法可以在定义中省略圆括号,例如上面的127行。
注意在调用中,尽管getA在定义时是带圆括号的,但是在调用时,带不带圆括号均可。但是,因为getB的定义是不带圆括号的,所以在调用它时,只能不带圆括号。
这里有一个风格的问题,如果一个方法修改了对象的内部状态,即调用该方法时内部变量发生了变化,那么在该方法的定义中就应该保留圆括号,它示意读者这是一个修改方法(会导致对象发生变化);
另一方面,如果调用该方法不会改变对象的任何状态,那么惯用方法是在该方法的定义中删除圆括号。