SlideShare a Scribd company logo
1 of 19
Download to read offline
我的 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 更要求開發者致⼒力于寫出好懂、好維護、好團隊合作的程式碼。

More Related Content

Similar to My scala learning note for TWJUG

如何在 Java App 中導入 Scala
如何在 Java App 中導入 Scala如何在 Java App 中導入 Scala
如何在 Java App 中導入 Scalajavatwo2011
 
使用 Eloquent ORM
使用 Eloquent ORM使用 Eloquent ORM
使用 Eloquent ORMShengyou Fan
 
Pytables
PytablesPytables
Pytablesgowell
 
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJustin Lin
 
CH09:Collection與Map
CH09:Collection與MapCH09:Collection與Map
CH09:Collection與MapJustin Lin
 
Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛Wen-Tien Chang
 
Ecmascript
EcmascriptEcmascript
Ecmascriptjay li
 

Similar to My scala learning note for TWJUG (10)

如何在 Java App 中導入 Scala
如何在 Java App 中導入 Scala如何在 Java App 中導入 Scala
如何在 Java App 中導入 Scala
 
使用 Eloquent ORM
使用 Eloquent ORM使用 Eloquent ORM
使用 Eloquent ORM
 
Pytables
PytablesPytables
Pytables
 
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
 
Scala
ScalaScala
Scala
 
CH09:Collection與Map
CH09:Collection與MapCH09:Collection與Map
CH09:Collection與Map
 
Scala+spark 2nd
Scala+spark 2ndScala+spark 2nd
Scala+spark 2nd
 
Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛
 
Ecmascript
EcmascriptEcmascript
Ecmascript
 
functional-scala
functional-scalafunctional-scala
functional-scala
 

My scala learning note for TWJUG