HaXe触ってみた
適当に書いた奴をGithubにあげておいた。
mizchi/haxe-try https://github.com/mizchi/haxe-try
enchant.jsもHaXeから触ってみた。nodeとenchant.js、enchantの型アノテーションは
haXeでenchant.jsする利点 - mitamex4uの日記 http://d.hatena.ne.jp/mitamex4u/20111230/1325248577
を使わせていただきました。
とりあえずクイックソート
配列操作系のユーティリティはあんまりなさそう。
undescore.jsクローンのUndescore.hxってのはあった。が、名前空間がほんとにUnderscore.mapとかで冗長な気が…
HaXeを使う指針
何よりも気に入ったのが型がオプショナルであるという点。Dynamic型にすればそれ以下のプロパティに対して型チェックを行わない。
JSから触る場合、元が型がない言語なので、絶対な型安全はありえない以上ある程度ラップして妥協することになる。
と同時に、それ以外のロジックはHaXeのピュアなロジックで吸収する。型安全な世界は絶対に崩れないように書くことで堅牢なコードにすることが可能。
外部に依存しないようなコードは、他の言語にもコンパイルが可能なのでコードの再利用性は高い。(つってもやっぱ独特なコードなんだが…
HaskellがIOモナドで純粋でないものを切り離すように、安全な部分と危険でない部分を分離する方向で、JSをラップして、できるだけ純粋なHaXeのロジックで、という指針がよさそう。
実際にコーディングする際、ライブラリのコードを触る部分より、自分で書いたほうが多くなるとは思うので、必要な物だけtypedefなりして型アノテーションをつけるといい。補完がきくようになるし。
HaXeの駄目な点
Coffee書き慣れた身からすると記述はやっぱり冗長。高階関数のためにLambdaはなにかしらの略記がほしい。
Function型がない?。コールバックの記述に不安が残る。サンプルコード見てもDynamic型を渡していた。Int -> Void みたいな書き方はできるみたいだが。
コンパイルされたコードはやっぱり読みづらい。
HaXeとSublimeText2
補完はそこそこ効く。そもそもIDEあんまりすきじゃないのでこれぐらいで十分。
InteliJとMonoDevelop版もあるらしいので、本格的なのはそっちに期待しておく。