Scalaがいい感じ

Scalaのメリット(・デメリット)

最近Java VM上で動くオブジェクト指向+関数型のScala(スカラと読む)という言語にハマっていて、ImageJのプラグインをScalaで書いたりしている。私はJava/Rubyの中級の入り口くらいの日曜プログラマだが、そのような人間にとって、Scalaはかなり取っつきやすい。

Scalaはスクリプトとしてクラス定義なしに書いて実行することもでき、またJavaのようにクラスの中にmainを定義したプログラムをコンパイルして実行することもできる。

Scalaで感じている主なメリットは、

  • すべてがオブジェクトであり、まるでRubyのようにメソッドチェーンやmap,イテレータを使い、直感的で簡潔な記述ができる。
  • Javaのライブラリ、既存のコードを完全にシームレスに使える。
  • Javaよりもソースが短く簡潔になる。変数の型宣言が不要。初期化する際の右辺のオブジェクトから型推論してくれる。
  • 変数、関数に型があるので、コンパイル時にエラーを見つけられる。
    • Eclipse上で書けば、書きながら相当数のバグを実行前になくせる。
    • 関数の仮引数には必ず型を書かないといけないので、それが面倒に感じることもある。
  • コレクション(配列など)に対して par というメソッドを呼ぶとそれ以下の関数適用が自動で並列化される!
    • 仕組みはよく分からないが、試すと確かに4コアのCPUをフル活用して速度が2倍くらいになったりする。詳細は未検討。
  • そのほかにもActorというメッセージングベースの洗練された並列化機構があるそうだ。これが"SCAlable LAnguageたるゆえんの一つ。

実用上感じているデメリットは今のところ、

  • Eclipseできちんとオートインデントできない
  • デバッガはブレークポイントこそつけられるが、変数の値は見えない。
    • つまりprintfデバッグしなくてはならない。

言語の根本とは関係ないのだけど、案外ストレスがたまる。それと、

  • 字句規則が若干複雑(演算子は両側に隙間を空けて書いた方が安全, etc)
  • コンパイルエラーのメッセージが難解すぎて意味不明なときがある(特に型関係のエラー)

なんていうのも結構最初のうちは戸惑うところかもしれない。

まあいずれにせよ、RubyとJavaを両方知っている人には学習コストはとても低いのでおすすめです。以前Javaで書いた小さいプログラムをScalaで書き直したらその時点ですでに、ある程度使えている感があった(たぶんその取っつきやすさがScalaが最近ここまで流行ってきている理由かと思われる)。

Java/Ruby経験者のためのScala入門へのリンク(随時追加予定)

私はEclipseにScalaプラグインを入れて使っている。IntelliJ IDEAというIDEのほうが良いという意見もあるが、Eclipseの方がJavaで使い慣れていたのと、インクリメンタルコンパイルができるといったメリットがある。