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で統一して書けるという事になる。
出来は良いと思いますが、ユーザーが増えるかどうかは予測できていません。