# Scala 簡介
Scala 是 Scalable Language 的簡寫,是一門多范式的編程語言
聯邦理工學院洛桑(EPFL)的Martin Odersky于2001年基于Funnel的工作開始設計Scala。
Funnel是把函數式編程思想和Petri網相結合的一種編程語言。
Odersky先前的工作是Generic Java和javac(Sun Java編譯器)。Java平臺的Scala于2003年底/2004年初發布。.NET平臺的Scala發布于2004年6月。該語言第二個版本,v2.0,發布于2006年3月。
截至2009年9月,最新版本是版本2.7.6 。Scala 2.8預計的特性包括重寫的Scala類庫(Scala collections library)、方法的命名參數和默認參數、包對象(package object),以及Continuation。
2009年4月,Twitter宣布他們已經把大部分后端程序從Ruby遷移到Scala,其余部分也打算要遷移。此外, Wattzon已經公開宣稱,其整個平臺都已經是基于Scala基礎設施編寫的。
## Scala 特性
### 面向對象特性
Scala是一種純面向對象的語言,每個值都是對象。對象的數據類型以及行為由類和特質描述。
類抽象機制的擴展有兩種途徑:一種途徑是子類繼承,另一種途徑是靈活的混入機制。這兩種途徑能避免多重繼承的種種問題。
### 函數式編程
Scala也是一種函數式語言,其函數也能當成值來使用。Scala提供了輕量級的語法用以定義匿名函數,支持高階函數,允許嵌套多層函數,并支持柯里化。Scala的case class及其內置的模式匹配相當于函數式編程語言中常用的代數類型。
更進一步,程序員可以利用Scala的模式匹配,編寫類似正則表達式的代碼處理XML數據。
### 靜態類型
Scala具備類型系統,通過編譯時檢查,保證代碼的安全性和一致性。類型系統具體支持以下特性:
* 泛型類
* 協變和逆變
* 標注
* 類型參數的上下限約束
* 把類別和抽象類型作為對象成員
* 復合類型
* 引用自己時顯式指定類型
* 視圖
* 多態方法
### 擴展性
Scala的設計秉承一項事實,即在實踐中,某個領域特定的應用程序開發往往需要特定于該領域的語言擴展。Scala提供了許多獨特的語言機制,可以以庫的形式輕易無縫添加新的語言結構:
* 任何方法可用作前綴或后綴操作符
* 可以根據預期類型自動構造閉包。
### 并發性
Scala使用Actor作為其并發模型,Actor是類似線程的實體,通過郵箱發收消息。Actor可以復用線程,因此可以在程序中可以使用數百萬個Actor,而線程只能創建數千個。在2.10之后的版本中,使用Akka作為其默認Actor實現。
## 誰使用了 Scala
* 2009年4月,Twitter宣布他們已經把大部分后端程序從Ruby遷移到Scala,其余部分也打算要遷移。
* 此外,Wattzon已經公開宣稱,其整個平臺都已經是基于Scala基礎設施編寫的。
* 瑞銀集團把Scala用于一般產品中。
* Coursera把Scala作為服務器語言使用。
## Scala Web 框架
以下列出了兩個目前比較流行的 Scala 的 Web應用框架:
* [Lift 框架](http://liftweb.net)
* [Play 框架](http://www.playframework.org/)
- Scala 教程
- Scala 簡介
- Scala 安裝
- Scala 基礎語法
- Scala 數據類型
- Scala 變量
- Scala 訪問修飾符
- Scala 運算符
- Scala IF...ELSE 語句
- Scala 循環
- Scala while 循環
- Scala do...while 循環
- Scala do...while 循環
- Scala break 語句
- Scala 函數
- Scala 函數傳名調用(call-by-name)
- Scala 指定函數參數名
- Scala 函數 - 可變參數
- Scala 遞歸函數
- Scala 高階函數
- Scala 函數嵌套
- Scala 匿名函數
- Scala 偏應用函數
- Scala 函數柯里化(Currying)
- Scala 閉包
- Scala 字符串
- Scala 數組
- Scala Collection
- Scala List(列表)
- Scala Set(集合)
- Scala Map(映射)
- Scala 元組
- Scala Option(選項)
- Scala Iterator(迭代器)
- Scala 類和對象
- Scala Trait(特征)
- Scala 模式匹配
- Scala 正則表達式
- Scala 異常處理
- Scala 提取器(Extractor)
- Scala 文件 I/O