Katsuyuki Ohashi Ohashi's Blog

月曜日 5 25, 2009

昨年あたりから少しずつ盛り上がりの兆しを見せていた Scalaですが、 「TwitterがRoRで実装した一部のサービスをScalaで書き換えているらしい」とか 「Google AppEngineでScalaを動かした」 というような具体的な事例が聞こえてくるようになると、 今後、更にScalaについて耳にする機会が増えてきそうですので、 どんなものかサラっとおさえておくことは悪くないと思います。

Wikipediaには

Scala (スカラ、Scalable Language) はオブジェクト指向言語と関数型言語の 特徴を統合したマルチパラダイムのプログラミング言語である。
と定義されています。 しかも、
ScalaはJavaプラットフォーム(Java仮想マシン)上で動作し、 既存のJavaのプログラムと容易に連携させることができる。 メインはJavaプラットフォームであるが、他も.NET Framework、 また携帯電話で使われている、 Java Platform, Micro Edition Connected Limited Device Configuration の実装もある。 Googleが中心になって開発が進められている携帯電話向けプラットフォーム・Androidでの動作も確認されている。
とのことでJavaとの親和性も高く、 Javaテクノロジー推進派の私たちとしてもとても興味深い技術です。 Scalaは静的型付けで、コンパイル時点でのエラー検出が可能なため開発生産性がとても高いと言われていますが、 型推論で自動的に型を補ってくれる機能があるため、Rubyのように簡潔なプログラム記述も可能です。これについては 「なぜScalaなのか?」というInfoQの記事に以下のように説明されています。
多くのプログラマがRubyを愛しており、好きで好きでたまりません。それはおそらくJavaが初めて登場して以来、最も激しく福音を説かれてきた言語のひとつです。彼らは大抵、柔軟で拡張性のある文法やクロージャ、そしてコードがどれほど簡潔で表現豊かかを引き合いに出します。

例えば、以下のようにシンプルなシンタックスでマップを作る事ができます。(Rubyでは”ハッシュ”と呼ぶ。ハッシュテーブルはマップを実装する唯一の手段です)
numberMap = {"one" => 1, "two" => 2, "three" => 3}

これをJavaで書くととても面倒です :
Map numberMap = new HashMap(); numberMap.put("one", 1); numberMap.put("two", 2); numberMap.put("three", 3);

では、Scalaだとどうでしょう?Scalaでのマップの例を見てみましょう。
var numberMap = Map("one" -> 1, "two" -> 2, "three" -> 3)

Ruby のコードと非常によく似ているのがお分かりでしょう。しかし、いくつか重要な違いがあります。具体的には、ScalaのコンパイラーはJavaのように、 numberMapがキーにはStringクラスを、値にはIntegerクラスを使うことを知っています。Javaとは違い、そうした指定を行う必要はありません。マップそれ自身が判断するのです!これは”型推論"と呼ばれています。

元々、Scalaは "Scalable Language" として開発されたこともあり、 Actorと呼ばれる軽量プロセスを使って、マルチコアCPUをおいしく使うことができるスケーラブルな プログラムを容易に作成することが可能ということも大きな魅力です。

他にも、ちょっと検索してみただけで、

Scalaを紹介するページがいくつか見つかりましたので、 お時間がある時にコーヒーでもすすりながら新たな刺激に浸るのはいかがでしょうか?
投稿されたコメント:

コメント
  • HTML文法 不許可