JSLintオプション考察「assignment expressions」

2013年06月24日

カテゴリー:

JSLintのオプショングループ「Tolerate」ではJSLintのコードチェックにおける「規制緩和」を行います。

これらのオプションはデフォルト値では全てfalse(許可しない)となっており、そのままだと最も厳しいコードチェックが行われます。ですが、それだとあまりにもコーディングがしづらいと思うならば、自分のコーディングスタイルに合わせていくつかのオプションをtrue(許可)することができます。

ただ注意しなくてはならないのは、あまりにも許可するオプションが多くなってしまうと、そもそもJSLintを使う意味がなくなってしまうので、「規制緩和」は最低限にとどめておくべきです。

ちなみに「Tolerate」を日本語で言うと「大目に見る」「黙って許す」「寛大に取り扱う」といった意味があるみたいです。

今回はオプショングループ「Tolerate」の中の「assignment expressions」について解説します。

この「assignment expressions」は if や while といったステートメントの条件式の中に代入式を書くことを許可するかどうかを指定するオプションとなります。

(function func() {
    "use strict";

    var max = 5,
        array = [];

    while ((max = max - 1) > 0) {    //Unexpected assignment expression
        array.push(max);
    }

    window.console.dir(array); //[4, 3, 2, 1]
}());

このオプションがfalse(またはdefault)の場合、上記のコードでは「Unexpected assignment expression.」という警告が出ます。これは、while文の条件式の中に代入式が使われていることが原因のようです。
このオプションをtrueにすれば、上記のコードはパスしますが、これは非推奨のようなので、falseのままにしておいた方が良いのだと思います。

このオプションをfalseにしたまま、JSLintのチェックをパスさせるには、以下の様なコードを書く必要があります。

(function func() {
    "use strict";

    var max = 5,
        array = [];

    while (max > 0) {
        max = max - 1;

        if (max === 0) {
            break;
        }

        array.push(max);
    }

    window.console.dir(array); //[4, 3, 2, 1]
}());

詳しくは後述しますが、7行目条件式部分を「- -max > 0」と変えても良さそうに思えます。ですがJSLintはデフォルトでは++や- -の使用を許可していないため、それだとまた別の警告が出てしまうのです。そのため、上記のような少し回りくどい書き方になってしまいました。(他にもっと良い書き方がありそうな気がしますが。。)

JSLintのオプション一覧ページへ