久しぶりにDart触った

2年ぶりぐらい。印象。

要約

  • 制御構文はJSそのまま
  • 型にまつわる構文がめっちゃジャバ
  • 驚き最小すぎる

JavaScriptの制御構文のままクラス作れるようにしてJavaアノテーションをいれたJavaScriptJavaエンジニアが乗り換えることを前提にしている雰囲気がある。

なにか似てる言語あったなと思ったのだが、あれだ、ActionScriptだ。

ある

  • class
  • interface
  • generics
  • lambda syntax
  • mixin
  • パッケージマネージャ(pub)
  • キーワード引数
  • それなりに豊富な標準ライブラリ

コンストラクタ定義が妙にC++っぽい。

ない

  • trait
  • optional(maybe)
  • enum
  • generator
  • パターンマッチ

traitないけどabstractクラスをwithで多重継承っぽい似たようなことはやれる

null安全性に対する配慮はない。まったくJavaのまま

実行時チェック?

気になった点。

明らかに間違ってる型を書く

num f4() => "";

呼ばない場合 dart -c で実行しても型違反が検知されない。

呼ぶと型チェックされる。

main() {
  f4(); // 関数コールしないと型チェックされない
}
~/s/dart $ dart -c hello.dart 
Unhandled exception:
type 'String' is not a subtype of type 'num' of 'function result'.
#0      f4 (file:///Users/mizchi/sandbox/dart/hello.dart:5:13)
#1      main (file:///Users/mizchi/sandbox/dart/hello.dart:17:5)
#2      _startIsolate.isolateStartHandler (dart:isolate-patch/isolate_patch.dart:214)
#3      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:122)

感想

現状のJavaScriptと比較して、言語のポテンシャルとして、普通のJavaScriptよりは便利なのは間違いないんだけど、わざわざエコシステム乗り換えて使うほどの価値はまだない。(DartからJSのライブラリ呼ぶのは困難)

とくにJavaの10年以上後継の言語なのにnullに対して一切配慮がないのはかなりまずい気がする。言語マニア的にはOptionalな型システム以外特に見るものがない。それも実行時チェックなら魅力半減どころではない。

すごくJavaっぽいが、自分はJavaよりは好きだ。AndroidJavaからDartに乗り換えるという噂があるが、Javaエンジニアに書かせるにはいい言語なのかもしれない。

自分にはとにかく刺激が足りない。swiftの方がまだ驚きがある。