ずっと避けてきたCoffeeScriptを使ってみた
HTMLはJade,
がいいんじゃないかな?
インストールとかは公式に載ってるから割愛
三つともVimのsyntaxが既に作られているのは嬉しい
テキトーに書いたサンプルみたいな物
さてさて, CoffeeScriptですが, この文法がすごく酷い素晴らしい!!!
Code : "(" ParamList ")" FuncGlyph Block | FuncGlyph Block ; FuncGlyph : "->" | "=>" ;
Codeってのは関数リテラルのことね (微妙なネーミング...
あ, 文法とかはgrammar.coffeeとか見れば載ってる
例えば
f = (x) -> x * x
をcoffeeでコンパイルすると
f = function(x) { return x * x; };
となる
カーリー化も簡単に書けるヨ *1
f = (x) -> (y) -> x * x + y
f = function(x) { return function(y) { return x * x + y; }; };
さて, ここまでは別にいいのだが, 括弧を書かなくても良いことから, ひょんな事で別の意味になる
foo bar -> baz foo bar, -> baz foo bar: -> baz
順番に
foo(bar(function() { return baz; })); foo(bar, function() { return baz; }); foo({ bar: function() { return baz; } });
である
ウギギ...分かりにくっ
顔文字!!!!
(JavaScriptとしては実行できないが)
\(^o^)/ = (´・ω・`) -> ☆(ゝω・)vキャピ
\(^o^)/ = function(´・ω・`) { return ☆(ゝω・)vキャピ; };
で, 今回のオチは
λ = (x) -> (s) -> (eval '(' + x + ')') s x = (f) -> f.toString().replace /\( *\)/, '(x)' alert (λ x -> 2 * x) 150 # 300
ラムダ式も書けちゃうなんて...!!!
CoffeeScriptまじλちゃん
結論
確かに素晴らしいが, 今後の文法の変動に注意
*1:ただ, f 100 200 がf( 100(200) )となってしまう