JS Lint、JS Hint、またはその他のツールを使用して、間違った数のパラメーターがメソッドに渡されるのを防ぐことはできますか?

タンダーセン

私はJavaScriptプログラミング(および一般的なスクリプト言語)に不慣れですが、構文エラーを作成したり、誤ってグローバル変数を宣言したりするときに、JSLintを使用して支援してきました。

ただし、JS Lintではカバーできないシナリオがあり、非常に便利だと思います。以下のコードを参照してください。

(function () {
    "use strict";
    /*global alert */

    var testFunction = function (someMessage) {
        alert("stuff is happening: " + someMessage);
    };

    testFunction(1, 2);
    testFunction();
}());

testFunctionに間違った数のパラメーターを渡していることに注意してください。意図的にパラメータを省略したり、そのようなパラメータを追加したりするような状況になるとは思いません。ただし、JSLintもJSHintもこれをエラーとは見なしません。

私のためにこれをキャッチする他のツールはありますか?または、そのようなパラメータを渡すことでエラーチェックを行うべきではない理由がありますか?

アンドリューアイゼンバーグ

これは通常、静的分析ツールでは不可能です。これにはいくつかの理由があります。

  • 一般に、JS関数は任意の数の引数を受け入れることができます。
  • ほとんどの(すべて?)リンターは、一度に1つのファイルでのみ機能します。彼らは他のファイルで宣言された関数について何も知りません
  • 関数として呼び出されるプロパティが期待する関数であるという保証はありません。このスニペットを検討してください:

    var obj = { myFunc : function(a,b) { ... } };
    var doSomething(x) { x.myFunc = function(a) { ... }; };
    doSomething(obj);
    obj.myFunc();
    

myFunc呼び出した後、異なる数の引数が必要になることを知る方法はありませんdoSomething

JavaScriptは動的言語であり、それを受け入れて受け入れる必要があります。

意図されていない問題をキャッチするためにリンティングに依存する代わりに、チェックを行う関数に前提条件を追加することをお勧めします。

次のようなヘルパー関数を作成します。

function checkThat(expression, message) {
  if (!expression) {
    throw new Error(message);
  }
}

次に、次のように使用します。

function myFunc(a, b) {
  checkThat(arguments.length === 2, "Wrong number of arguments.");

また、適切な単体テストを行うと、本番環境でこのエラーメッセージが表示されることはありません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ