0

これが私のコードです:

function function1() {
    var ids = GetIds(); // predefined function
    if (ids.length === 0) {
        alert("Please select at least one item to procees.");
        return;
    }

    ...
}

function function2() {
    var ids = GetIds(); // predefined function
    if (ids.length === 0) {
        alert("Please select at least one item to procees.");
        return;
    }

    ...
}

function function3() {
    var ids = GetIds(); // predefined function
    if (ids.length === 0) {
        alert("Please select at least one item to procees.");
        return;
    }

    ...
}

共通部分を抽出する方法は?コードをリファクタリングする方法は?returnステートメントを処理するのは非常に困難です。このコードのリファクタリングに関連するパターンはありますか?

前もって感謝します!

    if (ids.length === 0) {
        alert("Please select at least one item to procees.");
        return;
    }
4

3 に答える 3

2

これはデコレータパターンにぴったりです。

function decorateGetId(f) {
  return function () {
    var ids = GetIds();
    if (ids.length === 0) {
      alert("Please select at least one item to process.");
      return;
    } else {
      return f(ids);
    }
  };
}

その後、どちらか

function function1(ids) {
  // ...
}
function1 = decorateGetId(function1);

または私の好みです。関数ステートメントは巻き上げで奇妙なことをするからです。

var function2 = decorateGetId(function (ids) {
  // function 2 body ...
});
于 2012-07-13T07:51:14.883 に答える
0

できません。できることは、 を に移動することだけalert()ですGetIds()。ただし、この場合、関数名は少し混乱します。

var ids = GetIds();
if(!ids) return;

または、次のように変更することもできます。

GetIds(function(ids) {

});

関数GetIdsは、たとえば次のようになります。

function GetIds(callback) {
    var ids = ....;
    if(!ids) alert('...');
    else callback(ids);
}
于 2012-05-02T14:16:42.393 に答える
0

あなたは試すことができます:

function checkId(ids) {
    if (ids.length === 0) {
        alert("Please select at least one item to procees.");
        return false;
    }
    return true;
}

function function1() {
    var ids = GetIds();
    if (!checkId(ids)) return;

    // More code here
} 
于 2012-05-02T14:18:34.517 に答える