2

私はルールに従い、同じコードを繰り返さないようにしています。

私はこの単一の関数を持っていますが、入力に応じて、オブジェクトの配列またはオブジェクト (1 つのオブジェクトだけの配列ではなく) を返すようにします。

例 (実際の関数は明らかにこれよりもはるかに長く精巧です。はるかに長い計算の後の最後の数行しかありません)

function (nameParameter, ageParameter, inputType)
{
  if (inputType === "asObject")
  {
    var x = {};
    x.name = nameParameter;
    x.age = ageParameter;
    return x;
  }
  else if (inputType === "asArray")
  {
    var y = [];
    y.push(nameParameter);
    y.push(ageParameter);
    return y;
  }
};

これは可能ですか?もしそうなら、それは良い習慣ですか? それを回避する他の方法はありますか?

そうしないと、ほぼ同じコードで 2 つの異なる関数を作成する必要があります。

4

4 に答える 4

2

これをしないでください。1 つのバージョンを実装し、必要に応じて他の形式に変換するラッパー関数を追加します。そうすれば、呼び出し元は常に一貫した動作を得ることができ、コードの重複はありません。

function asObject(nameParameter, ageParameter)
{
    //Lots of work here.
    var x = {};
    x.name = nameParameter;
    x.age = ageParameter;
    return x;
};

function asArray(nameParameter, ageParameter)
{
  //Just defer to the other version and repack its response.
  var o = asObject(nameParameter, ageParameter);
  var y = [o.nameParameter,o.ageParameter ]; 
  return y;
}
于 2013-06-16T13:27:35.203 に答える
-1
if ( typeof inputType == 'object') { 
  //object part of code
} else {
  //array part of code
}
于 2013-06-16T13:20:59.113 に答える