1. 不用var。var是能够被不断修改的,而val是不能被修改的。使用val而不是var能让你的程序更强壮,bug更少,更好调试,更容易测试,在并发条件下,更容易调优而得到更好的性能。数学证实咱们不用var是没问题的。
2. 不用mutable的collection,和var一样的道理。
3. 不用null,在java中,咱们把null看成一个magic value给return回来,等待调用方进一步判断。但这很是容易让你的代码crash,并且你要处处进行判断。在scala中,能够用Option的,能够用Try,scala有好几种相似的结构,你们能够都看看。
4. 不要使用throw。直接抛出异常是个坏习惯(我不是说抛异常是个坏习惯,但抛的方法是能够更讲究的),并且你在多线程的状况下,你的异常抛给谁?在Scala中,你能够封装你的异常,把它做为一个值来返回,能够看一下Try[] ,不是try/catch的try, 是scala.utils.Try,和Option很是像。我不推荐使用Either用来处理成功和失败的混合状况,Left和Right多烧脑。
5. 不用thread。除非你要玩最底层,从头写个akka或者netty, 我以为你通常是用不上thread的。actor最好也不用,多用Future来设计你的多线程程序。
6. case class和match用的好可让你的程序更易读。极端点你均可以不用if, 但不必,我主张能用if仍是用if, 由于if其实不少时候更高效,更易读。还有scala的各类block是一个值,你能够直接使用,不少java程序员每每一开始不习惯这么干。好比说 val a = if (isAxxx) 1 else {......}
7. 减小继承的层级。弄一大堆trait来mixin,你这是在把scala导向c++。若是你只是像重用代码,能够经过传递一个function,或者纯粹oo的aggregation模式.java