Scalaの特徴
ScalaはJVM上で動作するため、Javaのライブラリを利用でき、またJavaからScalaを呼び出すことも可能。Javaバイトコードでコンパイルするので、Javaと同程度の速度が出るといったメリットがあるが、Erasureで型情報が消える場合もあるなどの短所もあるという。
関数型言語であり、オブジェクト型の言語であるため、静的型、推論型、無名関数、代数データ型、パターンマッチ、遅延評価などが利用でき、すべてがオブジェクトである特徴も持つ。また、DSL(Domain Specific Language)向けの構文規則を持ち、暗黙の型変換を定義すると、既存クラスの拡張のような振る舞いが可能である。
新しい言語であるため、文法なども未整理で、便利な記法があるにもかかわらず、ドキュメント化が追いついていないという状況もあるという。宮本氏は、“実務レベルの安定性”と“ワクワク感”は相反するので、「逆に発展途上なのがいい」と受け止めているとした。
Scalaの用途としては、もともとの型理論などの研究目的のほか、“Better Java”とも言われているとおり、Javaの代わりに使われることも多くなってきたという。またDSLやフレームワーク作成についても表現力ではScalaの方があるが、逆にLL(Lightweight Language)的な1行スクリプトはコンパイルが必要なため向いていないともした。現状では、何のための言語かは定まっていないが、宮本氏は、JVM上の関数型言語としてとらえているという。
Scalaの開発環境と開発サンプル
Scalaのインストールは、サイトからダウンロードして行う。JDK 1.4以上が必要で、JDK 1.5推奨とされている。
Windows環境では、『IzPack Java Installer』やEclipseのPlug-in使用もおすすめだという。
開発環境の説明の後は、宮本氏はいくつかのコードを解説した。まずはHelloWorld。クラスではなくオブジェクトで始まっているなどの違いはあるが「Javaを知っている人なら、すぐに理解できるのでは?」とした。続いてJavaからScalaを呼び出す方法、関数型のようなプログラム方法、パターンマッチングで場合分けを簡潔に記述できるCase Classの使用、実装も書けるインターフェイスのTrait(RubyのMix-inのようなもの)を解説した。
さらにScalaの一番の特徴である暗黙の型変換を行うImplicit Conversion
を紹介した。JavaではBooleanにifTrue
メソッドを追加できないが、Scalaの場合は、RichiBoolean
というクラスを使ってそこにifTrue
メソッドを作って既存クラスにメソッドを追加したような振る舞いをするコードができるという。
このほか、nullに対するdefaultを与える『Elvis Operator』(Implicit Conversionの応用例)やFizzBuzz(1から順に数を数え、3で割り切れるなら数字の代わりにFizz、5で割り切れるならBuzz、3でも5でも割り切れる場合は、FizzBuzzという世界のナベアツのギャグのようなゲーム)をExtractorで記述する方法、パッケージ管理システムの『Scala Bazaars』、テストフレームワークの『Scalacheck』などを解説した。
もっとScalaを知るには
トップバッターからいきなりスケーラブルな発表であったが、宮本氏は、今回紹介しなかった遅延評価、for記法、XML処理構文、Web frameworkなどについて機会があれば解説したいとして発表を締めくくった。なお、宮本氏おすすめの中級者向け資料は次のとおり。