Scalaひとめぐり

このページは、Scala Tours(原文)を日本語訳したものです。誤訳の可能性がおおいにありますので、正しいことを知りたい方は必ず原文をお読みください。

Scala は簡潔でエレガント、そして型安全な方法で共通のプログラミングパターンを表現できるよう設計された現代的なマルチパラダイム・プログラミング言語です。オブジェクト指向と関数型言語の特質をスムーズに統合します。

Scala はオブジェクト指向言語です

すべての値がオブジェクトである [1]という意味で、Scala は純粋なオブジェクト指向言語です。オブジェクトの型と振る舞いをクラス [2]とトレイト [3]によって記述します。クラスはサブクラス化 [4]と、多重継承の欠点のない置換えである、柔軟なミックスインベースの合成 [5]メカニズムにより拡張されます。

Scala は関数型言語です

すべての関数が値である[1]という意味で、Scala は関数型言語でもあります。Scala は無名関数の定義に簡単な構文 [6]を提供します。それは高階関数 [7]をサポートし、関数のネストを可能とし[8]、カリー化 [9]をサポートします。Scala のケースクラス [10]とパターンマッチング [11]の組み込みサポートは、多くの関数型プログラミング言語で使われる代数型をモデル化します。

さらに、Scala のパターンマッチングの概念は、右無視シーケンスパターン(right-ignoring sequence pattern) [13]の助けにより、XML データ [12]の処理へ自然に拡張されます。このコンテキストにおいて、シーケンス内包表記(sequence comprehensions) [14]はクエリの設計に役立ちます。

これらの特徴により Scala は、Web サービス[15]のようなアプリケーション開発に理想的なものとなっています。

Scala は静的な型付け言語です

Scala は、抽象化が安全で首尾一貫した方法でなされることを静的に強制する、表現力豊かな型システムを備えています。

特に、型システムは次をサポートします。

    • ジェネリッククラス (generic classes [16])

    • 変位指定アノテーション (variance annotations [17])

    • 上/下限 型境界 (upper[18] and lower[19] type bounds)

    • 内部クラスとオブジェクトメンバーとしての抽象型(inner classes [20] and abstract types [21] as object members)

    • 複合型 (compound types [22])

    • 明示的に型付けされた自己参照 (explicitly typed self references [23])

    • ビュー (view [24])

    • 多相的メソッド (polymorphic methods [25])

ローカルな型推論 [26]機構のおかげで、ユーザーはプログラムに冗長な型情報で注釈を付ける必要がありません。これらフィーチャーの組み合わせは、プログラミング抽象の安全な再利用とソフトウェアの型安全な拡張に、強力な基盤を提供します。

Scala は拡張性に富んでいます

現場では、固有領域のアプリケーション開発はしばしば領域固有の言語拡張を必要とします。Scala は、新たな言語要素をライブラリの形でスムーズに容易に加えることのできる、言語メカニズムのユニークな組合せを提供します:

    • どのようなメソッドも中置あるいは後置演算子 [27]として使えます。そして

    • 要請型(expected type:期待される型)に応じて、クロージャが自動的に構成されます[28](target typing:ターゲットによる型付け)。

両フィーチャーの併用により、構文拡張なしで、またマクロのようなメタプログラミング機能の助けを借りずに、新しい構文を簡単に定義できるようになります。

Scala は Java や .NET と相互運用できます

Scala は、ポピュラーな Java 2 実行環境(JRE [29]) とうまく相互運用できるように設計されています。特に、主流のオブジェクト指向 Java プログラミング言語との相互作用は可能な限りスムーズです。Scala は、Java と同列のコンパイルモデル(ダイナミックなクラスローディング、分割コンパイル)を採用しており、既存の多数の高品質ライブラリにアクセスできま す。.NET フレームワーク(CLR [30])のサポートも利用できます。

さらに次のページをお読みください。