2016-11-04 5 views
2

は、我々はそのようなコード(JS)を持って言う:チェック平等「の場合 - 他の」ステートメント

/** 
* @param {String} type Could be only 'high' or 'low' 
* @return {String} 
*/ 
function getSome(type) { 
    if (type == 'high') { 
     return 'This is high'; 
    } else if (type == 'low') { 
     return 'This is low'; 
    } 
} 

これよりも、このバリアントが望ましい場合には(私は、コメントが含まれていませんが、彼らは同じです) ?:

function getSome(type) { 
    if (type == 'high') { 
     return 'This is high'; 
    } else { 
     return 'This is low'; 
    } 
} 

私は同じような状況が何度もありました。通常、私は最高の異形については考えず、最初に来たものを書きました。しかし今、私は将来どのような変種を使うかを決めたいと思っています。

最後の質問です。変数が2つの値しか持たず、最初の値がifステートメントで与えられた場合、elseの変数の等価性をチェックする必要があるのですか?私はまた、関数のコメントを使用して答えに影響を与える可能性があることを知りたい。

+1

function getSome(type) { return { high: 'This is high', low: 'This is low'}[type]; } 

私は本当にあなたをフォローしていません。あなたが**知っているのは、その関数に渡すことができる値が2つだけであることが分かっていれば、2番目のバージョンは問題ありません。そのことについて何も保証できない場合は(そしてほとんど行うことはできませんが)、最初の処理を行い、最後の 'else'の場合にエラーを投げる方がよいでしょう。 –

+0

さて、これらの例はどちらも異なる動作をしています。あなたが望む結果を生み出すものを選ぶ必要があります。 –

+3

最終的にコメントは、実際に撮影されたコードパスには影響しないので、関係はありません。 –

答えて

2

を。知られていない型の場合、関数は未定義または他のデフォルト値を返します。デフォルト

function getSome(type) { 
    return { high: 'This is high', low: 'This is low'}[type] || 'type not known.'; 
} 
+0

これは私に別の解決策を見いだすように促します.3つの操作(2つの場所で)を使用します。それを読むのが難しいということはあなたの方法よりもまだ長いです。 – FreeLightman

9

値のみhighlowが有効である場合、第三の選択肢を検討してください。

function getSome(type) { 
    if (type === 'high') { 
     return 'This is high'; 
    } else if (type === 'low') { 
     return 'This is low'; 
    } else { 
     throw new Error(type + ' is invalid'); 
    } 
} 

が速い失敗。これはバグをもっと早く見つけるのに役立ちます。

0

それはあなたがより多くの可能な値持っている場合は特に、switch演算子を使用することがはるかに便利になります:二つの値のグループ化などのオブジェクトを使用しないのはなぜ

function getSome(type) { 

    switch(type){ 

     case 'hight': 
      return 'This is a high'; 
      break; 
     case 'low': 
      return 'This is a low'; 
      break; 
     case 'third': 
      return 'This is a third'; 
      break; 
     default: 
      throw new Error(type + ' is invalid.'); 
      break; 
    } 
} 
+2

注意:1) 'break'を打つことはないので、' return'の後に 'break'は必要ありません。 2)私は個人的には、OPが示しているように、あなたが2つの値しか期待していないときに、 'switch'ステートメントが過剰であると思います。ソリューションのために読んでおかなければならないコードとそのコードを比較します。 –

+0

1.私は 'break'を使うと良いと思います。 –

+0

2.特にもっと可能な値がある場合 –

関連する問題