Scala

出典: 謎の百科事典もどき『エンペディア(Enpedia)』
ナビゲーションに移動 検索に移動

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が宣言できる
  • チェック例外がない

脚注[編集]

  1. 参照型の配列であれば、できるだけ代わりにListなどのコレクション型を使うようにすれば回避できる。
  2. 逆に言うと、手続き的な処理を書く場合は中括弧が要る
  3. 厳密な表現ではないが、スコープは中括弧に囲まれた範囲のみ

関連項目[編集]