Scala
Scala(スカラ)とは、プログラミング言語の一つ。
概要[編集]
ScalaはJVM言語で、Javaにおけるオブジェクト指向の問題の多くを解消したオブジェクト指向言語であり、関数型言語の要素も多く取り込んだ(マルチパラダイム)言語である。
かつては.NET Frmework向けのコンパイラーが提供されていたが、バージョン2.11付近で削除された。
名称は、"Scalable"に由来している。小さなプログラムを作るときにも大きなプログラムを作るときにも使える(スケールする)という意味(だった気がする)。
非常に複雑で高度なことをJVM言語としてやっているため、コンパイルにかなり時間がかかる。
Scala用のビルドシステムにSBTというツールがある。
Javaとの比較[編集]
Javaには全ての親クラスとなるObject
クラスがあるが、プリミティブ型とObject
クラスの直接的な互換性は無い。また、配列とコレクションクラスの互換性も無い。これらをシームレスに扱えないため、度々これらの変換をしなければならない[1]局面が現れる(Javaの項目も参照)。
Scalaは、(Javaのラッパー型でない)数値型も全てオブジェクトであり、配列はコレクションの一種として扱える。オプション型もコレクションの操作が一部使える。
Javaでは、必ず変数の宣言に型を指定する必要がある。また、デフォルトでは再代入可能であるため、再代入を禁止するためには毎度final
修飾子を付ける必要がある。
Scalaには、変数の宣言には変更不可のval
か変更可能のvar
(非推奨)のどちらかを使い、型推論により型の指定が不要。型推論が上手くいかない場合は型を明示できる。
Javaでは、バージョン7まではインターフェイスに実装を持たせることができなかった。バージョン8でデフォルト実装が可能になったが、定数以外のフィールドが持てない。
Scalaでは、Javaのインターフェイスの代わりにtrait
があり、実装を持たせることができるほか、ジェネリックなフィールドを持たせることができる。
その他にも、以下のような機能・特徴がある。
- 文末にセミコロンが不要(付けることはできる)
- メソッドが式として表せる場合は中括弧が不要[2]
- 特定のスコープに限定した[3]パッケージのインポートや、インポートの際にクラス名を変えることができるなど、柔軟なインポート指定が可能
- 初期化を遅延させる
lazy
キーワード - 関数型言語由来のパターンマッチング (match - case)
- enum型の進化版、case class
- 唯一のオブジェクト(シングルトン)を表す
object
が宣言できる - チェック例外がない