>トップ
とりあえず『JavaScript: The Good Parts』の内容を基本として、あえて私がスタイルを変えている点、などについて書いてみる。
JSGP ではセミコロンの省略と処理系での補完が徹底して嫌われているのだが、セミコロンというのは本来、行末による区切りがなくても良いようにする構文要素であって、シェルスクリプトや awk の伝統に従い省略してしまうことにする。
省略可能な場所ないし自動補完される場所、あるいは省略不可能で処理系では補完されない場所が微妙なことがあるとは思うが、簡単なコーディング規則でだいたいなんとかなるようである。次のような規則でやっている。
1;
のようなおまじないと思えばよい、かな。他のファイルにつなげて使う時には先頭にも要るかも。(function (...) {...})(...)
などとした時、前半の関数を囲むカッコは必須である。しかし、この直前の行にあるものによっては、この前半のカッコが優先順位のためだけにあるのではなくて、関数呼び出しのための引数を囲むカッコだと解釈される(んで、直前の行にある式の値が関数じゃない、といってエラーになる)。こだわらずセミコロンを入れれば良いのだが、全体を if 文の条件節の中に放り込めばセミコロンを使わず書ける。if ((function (...) {...})(...)) {}
のようになる(これはセミコロンを使わない C 言語コードのためのテクニックの流用)。確かに continue を使いたいような場合というのは、関数に切り出して、途中 return にしたほうがいいのだけど、それでもあきらかに continue を使うべきパターン、というのを JSGP 中に発見した。
for in を使った繰返しにおいては obj.hasOwnProperty(key)
を使って意図しない key を避けよ、というパターンがあるが、この時サンプルとして示されているコードでは if のブロックの中にループの残り全体を入れてしまっている。こういうパターンでは continue を使ってネストが深くなるのを避けるべきだろう。
もちろん、この 1 段のネストすら避けたくなるような入り組んだコードはリファクタリングしろ、という意図があるのじゃなかろうかとは思うが。
確かに、むやみに凝った正規表現一発で選り分けようとするより、プログラムで「これを選んで、これを除外して、これを選んで」のようにして振り分けろよ、と言いたくなるようなものも見ないではない。が、正規表現は理論的背景のかっちりしたツールなので、習熟するに越したことはない。
特に後置の ++ や -- は変化前の値が式の値になる、というのが += 1 や -= 1 と違うので、コードをすっきりできることがある(小手先のコーディングのレベルだが)。なお -- は、「<!--」「-->」で囲んだ HTML コメント中のコードでは念のため避けておいたほうがいいだろう( HTML のほうで -- はコメント終了の直前に(のみ)現れるもの、とされている)。
キーワード function が長いが、それでも、一行に詰め込んでしまえるのなら一行にしたほうが簡潔に見えるように思う。80 桁にいつまでもこだわることはないという信仰というか。
関数を書く時には、function (...) { "use strict"
まで 1 行に詰め込んでしまう。こうすると grep function hoge.js | grep -v '"use strict"' のようにして、簡単に use strict 忘れやミススペルを検出できる。
演算子の前後に空白を入れる習慣にしていれば === をうっかり == としてしまっているものを検索するのが簡単。
return <式>
の「<式>」は、基本的にカッコでは囲まない(次の例外を除く)