JavaScript: The Good PartsでJSLintの厳しいルールの理由を学ぶ


著者のダグラス・クロフォードは、 JSONを広めた人であり、JSLintの開発者です。

本当の書き間違いが目立つようにするための、JavaScriptコードの書き方やルールを説明しています。

この本の9章のルールをチェックする文法チェッカーがJSLintで、npm版がjslintです。jslintはかなり厳しいチェッカーです。合格させるためには、多くのコードの修正が必要です。

あまりにもルールが厳しいので、別の開発者がルールをゆるくしたjshintをフォークしたそうです。JSLintからJSHintをフォークした理由

こんなに厳しいルールが本当に必要だろうか、なぜこんなに厳しいルールなのだろうか、と思ったことがきっかけで、この本を読みました。

私はifやwhileなどの構造化された構文では常にブロックを利用する。なぜならその方が間違いを起こしにくいからだ。

9章 スタイル p111
// 悪い例
if (a)
    b();

// 良い例
if (a) {
    b();
}Code language: JavaScript (javascript)

{}をつけたほうがいいと多くの人が言っています。{}があったほうが、ここがブロックだ!と強調されて、より間違いにくいです。

私は、本当の書き間違いが目立つようにしたいと思っているのだ。同様の理由から、代入式をif文の条件部分で利用することを、私は決してしない。

9章 スタイル p112

これは、次のようなことだと思います。

// 悪い例
if ((a = b) === c) { ... }
// 良い例
a = b;
if (a === c) { ... }Code language: JavaScript (javascript)

JavaScriptには、自動的にセミコロンを挿入するメカニズムがある。これに依存するプログラムを書いてはいけない。

付録 A.3 セミコロン挿入
// undefinedを返す
return
{
    status: true
};Code language: JavaScript (javascript)

セミコロンのメカニズムは知っていましたが、この問題を初めて知りました。

parseIntは、最初の文字が「0」だった場合、文字列を10進数ではなく8進数とみなす。parseInt("08", 10)のように、常に基数をパラメータとして渡すことをおすすめする。

付録 A.7 parseInt

ぼくもこのバグを書いてしまったことがあります。このルールを意識したのは、jslintに注意されてからです。

いまでもparseIntを基数なしで書いてしまい、jslintなどに注意されてから修正することがしばしばあります。

これらの演算子(++と--)を今後使わないというルールを自分に課した。

付録 B.7 ++ --

式の中で使うと、前置の++aと後置のa--は、結果が異なります。aの値を評価してから、aの値をインクリメントする。aの値をインクリメントしてから、aの値を評価する。説明するのも、覚えるのも難しいです。

Switft3で ++と--がなくなりました。そこで、ぼくもJavaScript以外の言語でも、++ と -- を使わないようにして、a += 1 か b -= 1を使うようにしました。

タイトルとURLをコピーしました