2012Tweetバイオインフォマティクスの分野では、現場で動くコードを書けるプログラミング言語でないと使えません。Scalaが本当に現場で使えるかどうかわかるまで、実際にコードを書いてみたり、開発環境、ライブラリを調べるなど調査に費やした時間も膨大でした。そのときの自分に教えてあげるつもりでScalaの利点をここにまとめていきます。関数型言語であるが、関数型言語でないScalaでは関数型言語のスタイルに固執する必要がない。命令型、副作用のあるコードも書けるので、慣れるに従い関数型のスタイルに近づければ良い。APIにあるライブラリの使い方に習熟してくると、これらをどう組み合わせてコードを書けばよいかが見えてくるようになる。私自身も、Scalaを覚えたての頃と、Scalaに慣れた現在ではコードを見る目、書き方がずいぶんと変わった。簡潔にコードを書ける型推論や構文の工夫により、Rubyなど動的型付け言語と同じくらいコーディングがしやすくなっている。}}となるが、このような詳細をコーディング時に気にする必要がない。コミュニティでよく使われており、大きなプロジェクトの開発にもScalaは実用的に使えるようになってきた。inferenceによる文法エラーの検知)が良い。sbtで特筆すべき点は、コードの更新をモニターして、変更があればすぐ再コンパイルを行い、テストコードの実行までを自動で行ってくれる。Scalaのコードはコンパイルに多少時間がかかるが、この機能により開発時のストレスが少ない。Javaで一般的なMavenによる開発スタイルを踏襲することもできるが、sbtを使う方が良い。mavenにできてsbtにできないこともたくさんあるが、sbtにできてmavenにできないことを実装する方が大変に思う。sbtの拡張はsbtのソースコードとにらめっこして、Scalaで書けばよい。作成したプラグインもGitHubに置くなどの手段が使える。centralにdeployするなど、一筋縄ではいかない箇所が多くある。2.8でcollectionクラスの大幅な改善により、格段に使い勝手が良くなった。Scala2.9では、並列処理のためのコレクションの拡張が行われており、マルチコアのための計算も簡単になっている。実際、私自身も10CPU以上を使った演算などを日常的に行えるようになって助かっている。練られた言語設計ScalaはJavaと同様JVMの上で動く言語であるが、オブジェクト指向言語としてだけ見ても、Javaと比較して改善されている点が多々ある。Stringにはformatというメソッドはないが、StringOpsなどに自動的に変換して機能を追加できる。"World")Java言語のリリース頻度は、使っているユーザー数が多いために慎重になっているためか、非常に遅い。foldなどcollectionクラスで使える便利なメソッドがすべて追加される。xxExceptionという形でexceptionの型までメソッドに指定しなくてはならないために、汎用的なライブラリを書く障害になっていた。Exceptionを使うように設計しなくてはならず、APIを使う側では何のエラーだかわからないExceptionをcatchするコードを大量に書く必要があった。書かなくても良くなり、programのmain関数内など、必要最低限の位置で例外をcatchすれば良いようになっている。matchingの機能パターンマッチが実装されているおかげで、Visitorパターンをもう書かなくてもいいと思うだけでありがたい。Odersky氏への以下のインタビュー記事を読むと、なぜScalaの言語が今のようなデザインになっているのかがよくわかる。妥協もあり、積極的に関数型言語、オブジェクト指向言語の融合をはかった部分もあり。Javaの不便を乗り越えるとともに関数型言語の良い面を取り入れるため最大限の努力をしている様子が伺える。