CoffeeScriptハマリどころ撰集


ぽすけて

ってなるときのための、プチはまりをノウハウ化しようというページ。このページに完成はありません。私がCoffeeScriptを放棄したとき、多分、更新が止まるって感じ。項目を足すような更新を行う度に通知にするんで、それがウザいってひとはストックしない方が良いよ。

コンパイルエラー関係

なんちゃらOUTDENTとゆわれるんだけど、インデントは綺麗だよ
thisを使わないといけない場面じゃないかい? もしくは、ダブルアローで束縛しなくちゃいけない場面じゃないかい?
変数を「知らん」ゆわれる
存在確認演算子使え

正規表現マッチ

思ったやつにマッチしない
それ、JavaScriptでもやったでしょ! えーと、直書きのときと違って、文字列リテラルのときは2重にエスケープが必要だよ。バックスラッシュが2倍になる。あと文脈的なもんにマッチさせたいときは、「\b」とか役に立つから思い出しておこう。
やっぱり正規表現マッチの後、結果にアクセスしたら墜ちる
それ、JavaScriptでもやったでしょ! マッチしなかったときの返値はnullだよ。見つからないときの返値が-1なのは、アレだ。indexOf

レースコンディション

なんか、次のコードが先行して走ってるんだけど
ひとつはインデントミス。並行実行になってる。次は、```setTimeout (->FUNC()),0```とやろうとして矢印忘れるケース。似てるけど、```setTimeout FUNC,0```とやろうとして()付けちゃうケース

クラスと関数

クラスメンバにアクセスできない
thisを使わないといけない場面じゃないかい? もしくは、ダブルアローで束縛しなくちゃいけない場面じゃないかい? この辺、かなり色々ありそうだ。
クラスメソッドにapplyを使うと挙動が違う
それ、メソッドに見せかけた怪しいやつです。Function.prototype.apply.callを使いませう。

配列

なんか、思ってたのと違うもんが出てきた
Javascriptでも同じ! とりあえず、メソッドを連鎖させてかっこつけるのやめれ。```.shift()```の返値は先頭にあった1要素だけなんで、```array.shift().shift()```なんて多重配列の場合しかあり得ないよ。後は、.concat()の結果を代入するのは意味ナッシングだからやめれ。同じものを参照しているので、混乱の元だ

とりあえずここまで

現状の凶悪さランキングとしては、レースコンディションの項かな。