【JS】JavaScriptのコーディングルール・規約を考える

■コーディングルール・規約

 * なんだか色々ある模様。。。
https://developer.mozilla.org/ja/JavaScript_style_guide
http://cou929.nu/data/google_javascript_style_guide/
 * でも、JSHintってツールもあるらしいので、利用するのもありじゃないか。。。
http://d.hatena.ne.jp/nagayoru/20110227/1298800749
http://qiita.com/items/92d9f8f533f2d0b3e055
 * 個人的に以下のなんかいいかも。
https://sites.google.com/a/cse.kyoto-su.ac.jp/cac-wiki/reference/javascript/00#TOC-var-

■バグを少なくするために

変数宣言の「var」を省略しない

理由

 * varで宣言しなかった変数は全てグローバル変数と見なされてしまい、意図しない動作になる可能性があるため。

{}を省略しない

理由

 * 意図しない動作になる可能性があるため。

【例】
 if (x === 1)
   if (y === 2) window.alert("x = 1、y = 2の時に実行");
 else // 直近のifに対応するため、if (y === 2)に対応してしまう
   window.alert("y = 2ではないって時に実行"); // 

比較演算子「==」を使わず「===」を使う

理由

 * 「==」はあいまいであるため、意図しない動作になる可能性があるため。

■高速化のためのルール

例外処理はなるべく使用しない

理由

 * ただでさえ、ブラウザ上で実行されることからコストが掛かるJavaScriptの処理が、Try-Catchはより実行コストが掛かるため

JavaScriptはBody部の最末尾に書くようにする

 * 書き方になんとなく抵抗があるが、理由をみて、納得。
 (ただ、シビアな環境じゃなければ無理して導入することもないかも)

理由

 * 一般的なブラウザでは、スクリプトの読み込みが完了するまでレンダリングを行わない。その結果、ダウンロードなどに時間が掛かるスクリプトをページの先頭に読み込ませても意味がなく、描画の遅れになるため。

修正前

<html>
<head>
【head部の内容】
<script type="text/javascript" src="test1.js"></script>
<script type="text/javascript" src="test2.js"></script>
</head>
<body>
【body部の内容】
</body>
</html>

修正後

<html>
<head>
【head部の内容】
</head>
<body>
【body部の内容】
<script type="text/javascript" src="test1.js"></script>
<script type="text/javascript" src="test2.js"></script>
</body>
</html>

コメントや空白行などを削除する

 コードを圧縮(コメントや空白行などを削除する)し、ファイルを軽くするといい。
本番環境に上げる時に圧縮して、開発時は改行がして見やすくするといいと思う。

理由

 * コメントや空白行/改行などを削除することにより、ダウンロード時間が短縮できる
 * 複数のjsファイルにまとめれば、HTTPリクエストの回数を抑えられる

方法

 * YUI Compressor Onlineなどのツールを使って圧縮する。使い方は以下を参照。
http://gigazine.net/news/20080113_yui_compressor_online/

evalは利用しない

理由

 * その場でコンパイル・実行する命令なので、実行するたびにコンパイルするからパフォーマンスが悪いため