JSLintオプション考察「continue」

2013年06月26日

カテゴリー:

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

「continue」オプションは、for や while といったループ内でcontinue文の使用を許可するかどうかのオプションです。デフォルト(false)ではcontinue文の使用は許可されません。

function func() {
    "use strict";

    var i = 0,
        max = 10,
        header = true;

    for (i = 0; i < max; i++) {
        if (header) {
            header = false;
            continue; //Unexpected 'continue'.
        }

        window.console.log(i);
    }
}

このオプションがデフォルト、または false の場合、上記のコードの11行目で「Unexpected ‘continue’」という警告が出ます。
つまり、continueステートメントは使用するな、とのことです。

理由としては、「continueステートメントの使用は、関数のコントロールフローを不明瞭にする傾向がある」だそうです。(原文はこちら→http://javascript.crockford.com/code.html

うーん、分かるような、分からないような。。。

やっぱり良く分かりませんが、とにかくこれに従い上記のコードを修正するのであれば、下記の様に書かなくてはなりません。

function func() {
    "use strict";

    var i = 0,
        max = 10,
        header = true;

    for (i = 0; i < max; i++) {
        if (header) {
            header = false;
        } else {
            window.console.log(i);
        }
    }
}

個人的な意見としては、continueステートメントを排除すると、ややコードが冗長になる感じがします。上記のcontinueステートメントが非推奨である理由(関数のコントロールフローを不明瞭にする傾向がある)と天秤にかけて、どちらをとるかは制作者の自由で良いと思います。(私はcontinueを使う派です。)

ちなみに、JSLintと同じくJavaScriptのコードチェックツールであるJSHintでは、continueステートメントは常に許可されてるようです。
このことからも、continueステートメントを排除するということの優先順位は低いのではないかと思われます。

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