2014/09/27

Scala.js は出来が良いのかな?

なぞって練習 というミニゲームの ソースコード(ただし自作ライブラリ使用) を見てみると

Java と比較して

  • var で、変数宣言で型を毎回書かなくて良くなっている
  • いろんな所で () が省略できる
  • new も大体省略
  • セミコロンもけっこう省略できる
  • class じゃなくて object と書けばシングルトンが作れる
  • for .. yield でコレクションをかなり自由に操作できる
  • コレクションを高階関数で操作できる標準ライブラリが強力
  • public とか static とか void とか書かなくてよかったり {} が省略できてメソッド宣言が短い
  • プレースホルダ構文( x => x * 2 が _ * 2 と書ける)でラムダ式がさらに短く
  • class MyPoint(x:Double, y:Double) { .. みたく、型宣言とコンストラクタを1回で書ける
  • package object は open できるので import scala.scalajs.js.Math._ とすれば Math.pow を pow と書ける
  • Some(10) match { case Some(10) => 10 case None => 0 } パターンマッチで値を分解しつつ、値に応じて処理を分岐できる
  • F# のパイプライン演算子 |> や関数合成 >> などのコンビネータも、ユーザー定義演算子として自由に定義できる
  • new CanvasManipulator(canvas).draw(); のような型変換を伴う処理は、implicit conversion を使えば canvas.draw(); と書ける

という感じの事などが出来ていて Scala の言語機能で定型的なコードをどんどん削っていけます。
また、コーディングの自由度が高いので、可読性やメンテナンス性を良い状態に保ちやすい気がします。

その他の事情

  • コンパイル時間は多分長め
  • ミニマムな実行ファイルは 200kb 程度
  • サンプルは結構あるが、オープンソースで使われている例はまだ少ない
  • 重要なライブラリ出てきているが少ないので、既存のJavaScript資産との相互運用が必要
  • 定義にアノテーションを付ければ、JavaScript との相互運用が出来る
  • Scala がWebサービスのサーバーサイドで使われているので、クライアントサイドを Scala.js にすると、WebサービスをScalaで統一して書けるという事になる。

出来は良いと思いますが、ユーザーが増えるかどうかは予測できていません。

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.