狠狠撸

狠狠撸Share a Scribd company logo
我的 Scala 學習筆記
使?用?心得與知識分享
為什麼要學?
? 該是時候學個新語?言了
? ?人家說Java 8 抄了很多scala的好料,那就先看看
scala是啥吧
? 公司要?用
?一些有趣的語?言特性
? no primitive type, everything is object
? +, -, *, /, ++, :: … 這些都是method(no traditional
operator)
? ?支援 Tuple ( 這玩意好?用!)
? Function is an object
Collections
? Array
? List: default using immutable
? Map: Map.Entry 的type是 Tuple2
? 可以跟Java 的互轉
Map Reduce
? collection ?支援?一系列的method可以進?行各種
Map Reduce 操作。
? foreach(), map(), reduce(), zip()
? ?atMap()
? withFilter()
If clause
? 宣告的format 跟 java ?一樣: if(…) else
? 但是它有回傳值!
? val a = if(k>3) “k>3” else “k<=3”
For loop
? scala的 for 可以做很複雜的事情
? 實現是?用 map reduce methods
c1.foreach(x => c2.foreach(y => c3.foreach(z => {...})))
for(x <- c1; y <- c2; z <-c3) {...}
for(x <- c1; y <- c2; z <- c3) yield {...}
c1.?atMap(x => c2.?atMap(y => c3.map(z => {...})))
for(x <- c; if cond) yield {...}
c.withFilter(x => cond).map(x => {...})
case class
? Code Generator + class declaration
? immutable POJO ?avour
? ?非常好?用!
Pattern Matching
? 超級強化後的switch
? match by value
? match by type
? or
? match by form
?心得感想
記得要常Compile
? scala 等價的敘述可以有太多的表?示法
? 你總是不很確定...
? IDE (IntelliJ ) 似乎不太做 Incremental compiling
不要濫?用Tuple
? ian.pro?le.location.city V.S. ian._1._3._2(WTF?)
? case class很好?用,不要濫?用tuple
符號作為method name…
? 常常不是個好主意
? “dog” => 四條腿、丟顆球會追過去,沒事弄得你滿臉?口?水的動物
? “>+>:” => ???????
? 不要在程式裡引進怪語?言,尤其?文法還很怪。
? ?一個難?用的例?子: scala dispatch classic
Map Reduce ?用很?大
? ?一路combo下去是很爽,但...
? loss of meta information
? Abstract Leaking
? ?用過頭就降低團隊?生產?力
? 為了可讀性、增加meta info與維修?方便,?一個段
落還是抽private method吧。
scala 喜歡省略
? 10 + 3 -> (10).+(3) (看範例)
? 好的省略使?用需要練習
? 團隊對於省略要有共識
?心得感想
UX的概念在team work programming 時很重要。!
scala?比起java 更要求開發者致?力于寫出好懂、好維護、好團隊合作的程式碼。

More Related Content

My scala learning note for TWJUG