19

Click here to load reader

My scala learning note for TWJUG

Embed Size (px)

DESCRIPTION

TWJUG 介紹scala的投影片,範例程式碼在: https://github.com/zanyking/java_two/tree/master/TWJUG/myScalaLearningNote 想要了解更多scala語言特性的朋友,來這裡挖寶吧: http://openhome.cc/Gossip/Scala/

Citation preview

Page 1: My scala learning note for TWJUG

我的 Scala 學習筆記使⽤用⼼心得與知識分享

Page 2: My scala learning note for TWJUG

為什麼要學?

• 該是時候學個新語⾔言了

• ⼈人家說Java 8 抄了很多scala的好料,那就先看看scala是啥吧

• 公司要⽤用

Page 3: My scala learning note for TWJUG

⼀一些有趣的語⾔言特性

• no primitive type, everything is object

• +, -, *, /, ++, :: … 這些都是method(no traditional operator)

• ⽀支援 Tuple ( 這玩意好⽤用!)

• Function is an object

Page 4: My scala learning note for TWJUG

Collections

• Array

• List: default using immutable

• Map: Map.Entry 的type是 Tuple2

• 可以跟Java 的互轉

Page 5: My scala learning note for TWJUG

Map Reduce

• collection ⽀支援⼀一系列的method可以進⾏行各種Map Reduce 操作。

• foreach(), map(), reduce(), zip()

• flatMap()

• withFilter()

Page 6: My scala learning note for TWJUG

If clause

• 宣告的format 跟 java ⼀一樣: if(…) else

• 但是它有回傳值!

• val a = if(k>3) “k>3” else “k<=3”

Page 7: My scala learning note for TWJUG

For loop

• scala的 for 可以做很複雜的事情

• 實現是⽤用 map reduce methods

Page 8: My scala learning note for TWJUG

c1.foreach(x => c2.foreach(y => c3.foreach(z => {...})))

for(x <- c1; y <- c2; z <-c3) {...}

Page 9: My scala learning note for TWJUG

for(x <- c1; y <- c2; z <- c3) yield {...}

c1.flatMap(x => c2.flatMap(y => c3.map(z => {...})))

Page 10: My scala learning note for TWJUG

for(x <- c; if cond) yield {...}

c.withFilter(x => cond).map(x => {...})

Page 11: My scala learning note for TWJUG

case class

• Code Generator + class declaration

• immutable POJO flavour

• ⾮非常好⽤用!

Page 12: My scala learning note for TWJUG

Pattern Matching

• 超級強化後的switch

• match by value

• match by type

• or

• match by form

Page 13: My scala learning note for TWJUG

⼼心得感想

Page 14: My scala learning note for TWJUG

記得要常Compile

• scala 等價的敘述可以有太多的表⽰示法

• 你總是不很確定...

• IDE (IntelliJ ) 似乎不太做 Incremental compiling

Page 15: My scala learning note for TWJUG

不要濫⽤用Tuple

• ian.profile.location.city V.S. ian._1._3._2(WTF?)

• case class很好⽤用,不要濫⽤用tuple

Page 16: My scala learning note for TWJUG

符號作為method name…

• 常常不是個好主意

• “dog” => 四條腿、丟顆球會追過去,沒事弄得你滿臉⼝口⽔水的動物

• “>+>:” => ???????

• 不要在程式裡引進怪語⾔言,尤其⽂文法還很怪。

• ⼀一個難⽤用的例⼦子: scala dispatch classic

Page 17: My scala learning note for TWJUG

Map Reduce ⽤用很⼤大• ⼀一路combo下去是很爽,但...

• loss of meta information

• Abstract Leaking

• ⽤用過頭就降低團隊⽣生產⼒力

• 為了可讀性、增加meta info與維修⽅方便,⼀一個段落還是抽private method吧。

Page 18: My scala learning note for TWJUG

scala 喜歡省略

• 10 + 3 -> (10).+(3) (看範例)

• 好的省略使⽤用需要練習

• 團隊對於省略要有共識

Page 19: My scala learning note for TWJUG

⼼心得感想

UX的概念在team work programming 時很重要。!scala⽐比起java 更要求開發者致⼒力于寫出好懂、好維護、好團隊合作的程式碼。