2年ぶりぐらい。印象。
要約
- 制御構文はJSそのまま
- 型にまつわる構文がめっちゃジャバ
- 驚き最小すぎる
JavaScriptの制御構文のままクラス作れるようにしてJavaのアノテーションをいれたJavaScript。Javaエンジニアが乗り換えることを前提にしている雰囲気がある。
なにか似てる言語あったなと思ったのだが、あれだ、ActionScriptだ。
ある
- class
- interface
- generics
- lambda syntax
- mixin
- パッケージマネージャ(pub)
- キーワード引数
- それなりに豊富な標準ライブラリ
ない
- 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よりは好きだ。AndroidはJavaからDartに乗り換えるという噂があるが、Javaエンジニアに書かせるにはいい言語なのかもしれない。
自分にはとにかく刺激が足りない。swiftの方がまだ驚きがある。