読者です 読者をやめる 読者になる 読者になる

CoffeeScriptをやってみた

JavaScript

ずっと避けてきたCoffeeScriptを使ってみた


HTMLはJade,

CSSLESS,

JavaScriptCoffeeScript

がいいんじゃないかな?



インストールとかは公式に載ってるから割愛

三つともVimのsyntaxが既に作られているのは嬉しい



テキトーに書いたサンプルみたいな物

Jade

LESS

CoffeeScript


さてさて, 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) )となってしまう