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