JavaScriptで、もう連想配列の最後のカンマに悩まない!(※追記あり) · DQNEO起業日記
で言及いただいていたので今の自分の意見を。
その発想は無かったし、無いですね。
要素数が変わる、無駄なkeyが入る
Node.jsなんかではECMA Script 5のObject.keys()
が使えるので
var len = Object.keys(obj).length;
とか
Object.keys(obj).forEach(function (e) { console.log(e) });
とかでオブジェクトのキーを走査したり、ということを普通にやります。そんなときに"dummy"なんてキーが入ってたら邪魔でしょうがないです。
メモリ領域の無駄、はたいして気にならないでしょうけど、とにかくこんなのが入っていると邪魔になります。
書く側の都合でロジックを汚すのは問題外
プログラム書く側はこの方法を死守することで余計なバグを産まずに済むかもしれませんが、予備知識なくそれを引き継いだり読んで勉強しようとしているヒトがそのソースコードを読んでどう思うでしょうか。
「ん…? dummy? 何だろうコレ。どこかで特殊な使い方してるのかな?」
「…いや、うーん、他の箇所みてみたけどどうも使われてないっぽいな。でも勝手に消すのもアレだし、書いたヒトに訊いてみるか」
「すみません、この"dummy"ってどういう意図で定義されてるんでしょうか?」
『あー、これは末尾にカンマがついているとIEで云々…』
「なるほどー、そういう意図だったんですねー。納得しました。ありがとうございます」
のようになるでしょう、きっと。
この上記のやり取り、すべて無駄。こんな無駄な1行バッドノウハウのために、ロジックを汚されることになり、プログラムを読む側に混乱を与えます。意図した動作をさせる意外の用途としてプログラムに余計なものを混入させるのは良くない。のでこの方法には異論を唱えます。
そもそもエディタで簡単に検出できる
自分はEmacsでjs2-modeを使っていますが、デフォルト設定で末尾カンマが入っていれば下線表示によって警告を出してくれます。
js2-modeでなくても、jslintやjshintでflymakeをかけるなど、syntax checkは普通のエディタにはそれくらいの機能がついているはずなので、それを活用していればそんなエラーでハマることはそう多くないです。こういったツールで解決できる問題をソースコード上に持ち込むのが間違っている。と思います。
まとめ
以上、ダミー要素を挿入する方法に反対する主な理由を3点ほど挙げてみました。
正直なところ「とにかく気持ち悪いのでホントやめて欲しい」です。
行頭カンマにしては、というのは既に議論されているし、特に言及しません。