回 OPENHOME 首頁
語言技術:Scala Gossip
If I were to pick a language to use today other than Java, it would be
Scala
.
- James Gosling, creator of Java -
I can honestly say if someone had shown me the
Programming in Scala
book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I'd probably have never created Groovy.
- James Strachan, creator of Groovy -
Scala 是一個可直譯、可編譯、靜態、可運行於 JVM 之上、可與 Java 互操作、融合物件導向編程特性與函式編程風格的程式語言。
文件基於 Scala 2.7.7 撰寫
起步走
從一些簡單的語法開始,了解 Scala 的許多特性,所以就算是起步走,東西也夠多了。
基本環境與指令
簡單的小程式可以使用 scala 指令,編譯的事就交給 scalac,編譯想快點就用 fsc。
指令互動環境
scala 指令
scalac 與 fsc
資料、變數、操作
所有的東西都是物件,所有的操作都是方法。
資料型態
變數、常數
操作方法
數值操作
操作順序與關聯
主控台輸入輸出
內建控制結構
運算式有傳回值,迴圈沒有,對了!Scala 沒有 break 與 continue。
if 運算式
for 運算式
while 迴圈
match 運算式
try 運算式
函式、類別
先從一些簡單的自定義開始,更多的花樣在後頭。
簡單的函式
簡單的類別
單例物件
常用物件
在變與不變之間,先體會 Scala 更多的特性。
String
Array
List 與 Tuple
Set 與 Map
了解更多
Scala 本身具有擴充性,不過這必須了解更多語法特性與細節。
定義函式
函式語法看似繁多,但基本上從函式為一級(First-class)公民的出發點開始,就不會覺得複雜了。
函式重載、區域函式、重複參數
一級函式(First-class function)
閉包(Closure)
部份套用函式(Partially applied function)
以名呼叫參數(By-name parameter)
鞣製(Curry)
定義類別
Scala 建構式有些限制,使用方法可以定義所謂運算子(Operator),提供語法蜜糖與存取方法。
建構式
定義操作方法
apply() 與 update() 方法
屬性存取方法
使用繼承
Scala 的繼承作了一些限制,這使你在使用繼承前必須多一份思考。
繼承
遮蔽(Shadow)與重新定義(Override)
無參數方法
抽象類別
物件相等性
重新定義 equals() 方法
混入特徵(Trait)
特徵抽離共同的介面與實作,類別動態地繼承(extends)或具有(with)特徵。
作為規範介面的特徵
作為共用實作的特徵
堆疊修飾(Stackable modification)
類別管理
東西別亂擺,方便別亂給,權限別亂設。
套件(Package)
匯入(Import)
存取修飾
類別階層
繼續深入
模式比對(Pattern match)
還在寫 if..else 嗎?有些情況使用模式比對可以作的更好、更簡潔!
案例類別(Case class)
基本模式
List 與 Tuple 模式
變數綁定(Variable binding)、模式防護(Pattern guard)
Option 型態
密封類別(Sealed class)
部份函式(Partial function)
提取器(Extractor)
更有彈性地運用模式比對的一種方式。
apply() 與 unapply() 方法
不同個數的元素提取
規則表示式與提取器
進階型態
類別、特徵之外,還有更多的型態。。XD
抽象成員
初始抽象 val 成員
型態(type)成員
路徑相依型態(Path-dependent type)
列舉(Enumeration)
結構型態(Structural typing)
型態參數化(Type parameterization)
定義可參數化型態,讓 Scala 型態系統更有彈性。
型態參數基礎
上界(Upper bound)、
下界(Lower bound)、視界(View bound)
共變性(Covariance)
逆變性(Contravariance)
既存型態(Existential type)
參數化型態的物件相等性
隱式轉換(Implicit conversion)
一切都是編譯器搞的鬼。。。XD
轉換規則
隱式函式
隱式參數
Scala 與 Java
站在巨人的肩膀上。。。XD
標註(Annotation)
在 Scala 中使用 Java 類別
在 Java 中使用 Scala 類別
進階型態對應探討
參考資料
First Steps to Scala
Programming in Scala