Click here to load reader
Upload
ian-tsai
View
920
Download
2
Embed Size (px)
DESCRIPTION
TWJUG 介紹scala的投影片,範例程式碼在: https://github.com/zanyking/java_two/tree/master/TWJUG/myScalaLearningNote 想要了解更多scala語言特性的朋友,來這裡挖寶吧: http://openhome.cc/Gossip/Scala/
Citation preview
我的 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()
• flatMap()
• 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.flatMap(x => c2.flatMap(y => c3.map(z => {...})))
for(x <- c; if cond) yield {...}
c.withFilter(x => cond).map(x => {...})
case class
• Code Generator + class declaration
• immutable POJO flavour
• ⾮非常好⽤用!
Pattern Matching
• 超級強化後的switch
• match by value
• match by type
• or
• match by form
⼼心得感想
記得要常Compile
• scala 等價的敘述可以有太多的表⽰示法
• 你總是不很確定...
• IDE (IntelliJ ) 似乎不太做 Incremental compiling
不要濫⽤用Tuple
• ian.profile.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 更要求開發者致⼒力于寫出好懂、好維護、好團隊合作的程式碼。