Scala
出典: フリー百科事典『ウィキペディア(Wikipedia)』
| Scala | |
|---|---|
| 拡張子 | scala |
| パラダイム | オブジェクト指向言語、関数型言語 |
| 登場時期 | 2003年 |
| 設計者 | Martin Odersky |
| 型付け | 強い静的型付け |
| 主な処理系 | Scala |
| 影響を受けた言語 | Java, Haskell, Standard ML, Objective Caml, Smalltalk, Erlang |
| ウェブサイト | http://www.scala-lang.org/ |
| 開発元 | LAMP/EPFL |
|---|---|
| 最新版 | 2.9.1(2011年8月29日) |
| プラットフォーム | Javaプラットフォーム |
| ライセンス | BSDライセンス |
Scala (スカラ、スカーラ、スケイラ、Scalable Language) はオブジェクト指向言語と関数型言語の特徴を統合したマルチパラダイムのプログラミング言語である。
目次 |
[編集] プラットフォーム
ScalaはJavaプラットフォーム(Java仮想マシン)上で動作し、既存のJavaのプログラムと容易に連携させることができる。 メインであるJavaプラットフォームの他にも下記のプラットフォームをサポートしていたが、現在は開発中断になっている。
- Javaプラットフォーム
- .NET Framework[1]
- 2.7.0以降中断されているもの
[編集] 歴史
Scalaはスイス・ローザンヌにあるスイス連邦工科大学(EPFL)のマーティン・オーダスキー教授によって設計された。
[編集] 特徴
主に以下のような特徴がある。
- 開発生産性を高める簡潔な表記が可能である
- Javaの豊富なライブラリが使える(.NET Framework上で実行する場合、.NETのライブラリが使える)
- 全てがオブジェクトとして扱われるオブジェクト指向言語である。
- 静的型付けを行う関数型言語である。静的型付けのため、コンパイル時点でのエラー(特に型関連の)検出が得意である。
- 型(クラス)をJavaなどと比べてより容易に作ることができ、また、型を使った条件分岐をはじめとして、型に関する機能が豊富なため、メソッドやメンバ変数を束ねるだけのクラスではなく、型に積極的な意味を持たせてのプログラミングが可能である。
- 型推論があるため、多くの場所で型を自動的に補ってくれる
- 純粋関数型言語的な、val(定数)と不変List,Set,Mapという組み合わせでもプログラミングできるし、より手続き型的なvar(変数)と可変List,Set,Mapという組み合わせでもプログラミングができる
- 関数もオブジェクトとして利用可能であり、カリー化が可能
- パターンマッチを利用可能であり、任意のクラスをグループ化してパターンマッチで判定させることが可能(CASEクラス)
- implicit def と言う宣言を用いて、既存のクラスを拡張したような記述が可能
- traitクラスを用いた、Mix-in機能を持つ
- クロージャの利用が可能
- XMLを直接プログラム内部に記述可能
- 標準ライブラリとして、Actorと呼ばれるErlangライクな文法の軽量プロセスが提供されている
- 遅延評価のある関数型言語であるため、無限リストを扱え、標準ライブラリにそのためのクラスが提供されている
- 構文解析のための、パーサーコンビネータが標準ライブラリに入っている
- ユニットテストのためのライブラリが標準ライブラリに入っている
[編集] 例
「リストのような構造の物から条件を満たす物を探す」という例を挙げる。より具体的に、「文字列の中から'a'という文字が存在するか判定する」という例を挙げる。
手続き型言語的なコードを書くと以下のようになる。
def hasA(s:String):Boolean = { for(i <- 0 until s.length) { if(s(i) == 'a') return true } return false }
これを、関数型言語的な再帰に置き換えると以下のようになる。
def hasA(i:Int, s:String):Boolean = { if(i == s.length) return false if(s(i) == 'a') return true return hasA(i + 1, s) }
さらに、静的型付け関数型言語であることを最大限生かすと以下のコードになる。
def hasA(s:String) = s.exists(_ == 'a')
_ == 'a'の部分は、c => c == 'a'の省略記法であり、引数cをとり、c == 'a'の結果を返すクロージャ(無名関数)である。
[編集] Scala開発の動機
Martin Oderskyによると、Scala開発の動機は2つの仮説による。
- 汎用言語はスケーラブルでなくてはならない。同じ概念で、小さいプログラムも大きなプログラムも記述できるべきである。
- スケーラビリティは関数型言語とオブジェクト指向言語の2つのプログラミングの概念を統合し、一般化することにより実現できる。
[編集] 脚注
[編集] 外部リンク
- Scala website
- A Scala Tutorial for Java Programmer の和訳 - オフィシャルチュートリアルの和訳
- Scala wiki
- Scala による Web アプリケーションフレームワーク Liftの公式サイト
|
||||||||||||||||||||||||||||||||||