2009-05-15 18 views
18

条件演算子は次のようなステートメントのように使用できますか?JavaScriptの条件付き演算子

(x == y) ? alert("yo!") : alert("meh!"); 

これを使用して値を割り当てるのは正しいですか?

z = (x == y) ? "yo!" : "meh!"; 

ステートメントのように使用するのが間違っていない場合は、実行するコードを複数行追加することは可能ですか?複数行のコードに対してifthenとswitch文を使用する方が正しいですか?

(x == y) ? (alert("yo!"), document.write("woot!")) : (alert("meh!"), document.write("blah!")); 
+0

理由のために構文が存在する - それは問題ありません。 – Cerebrus

+0

私は事を行うための効率的またはより適切な方法があることを十分知っています。私はちょうど彼らがほとんどの時間であるか分からない!ありがとう、みんな、チンミング!条件付き演算子と複数のステートメントは混同しないでください。とった。 – baokhangluu

答えて

25

条件演算子は、意図的に簡潔で割り当てに特に有用である:

var a = x ? 1 : 2; 

は条件付きで実行する機能は、可能ではあるが、読みやすさのためにIF/ELSE文を使用して行われるべきであるためにそれらを使用する:

// This is possible but IMO not best practice: 
X ? doSomething() : doSomethingElse(); 

ロングったらしいながら、ほとんどの時間は、これはより良いソリューションです:

if (X) { 
    doSomething(); 
} else { 
    doSomethingElse(); 
} 

IF/ELSE構造の大きな利点の1つは、各条件の下で追加のタスクを最小限の手間で追加できることです。

最後のスニペットも可能ですが、やや長めに見えますが、やはり従来の論理構造に適している可能性があります。 IF/ELSEブロックのように。つまり、条件演算子は依然として読み込み可能です。たとえば、次のようになります。

(something && somethingElse > 2) ? 
    doSomeLongFunctionName() 
    : doSomeOtherLongFunctionName(); 

最終的には、多くのものと同様、個人的な好みになります。あなたが書いているコードはあなたのためだけではないことを常に忘れないでください。将来的に他の開発者がそれを乗り越えなければならないかもしれません。可能な限り読みやすくするようにしてください。

2

あなたにも書かれている可能性が二つの方法のどちらかが許容されている:

alert((x == y) ? "yo!" : "meh!"); 

を除けば、私は複数行の文の条件付きインラインを使用することをお勧めすることはないことから、ちょうど場合/他の標準を使用ブロック。入力した構文が有効なJSでもない場合、複数のステートメントを匿名メソッドとyada yadaに置くことができます。それで、扱いにくい、不必要に難しいコードが混乱してしまいます。もう一度、標準のif/else。

+0

ありがとう!私はそれを最適化する方法を考えていませんでしたが、それは素晴らしいです。私はまだWITHIN式で使うことができるように沈める必要があります。 – baokhangluu

4

JavaScriptはあなたがそれをするのを妨げませんが、あなたのコードを読んでいる人を混乱させる非常に珍しい習慣です。

ほとんどの場合、条件付き演算子は、ステートメントではなく2つの代替値を選択するために使用されます。 ifステートメントは、ステートメントの条件付き分岐に適しています。

(x == y) ? [alert("yo!"), document.write("woot!")] : otherstuff(); 

をしかししないでください:あなたが本当にしなければならない場合

あなたの最後の質問に関しては、そう、あなたは[]構造を乱用することができます。 8-)

4

これはあなた次第ですが、いずれにしてもかまいません。しかし、あなたはこのスタイルが会社のガイドラインに従っているのか、このコードをどの程度読んでほしいのですか?

if文を使用する方が読みやすくなります。

私は個人的には、簡単で素早い真偽条件(それを意味するところ)または "インライン"が必要な場所でのみ、三項演算子を使用します。

2
私はクリスとJ-Pの両方に同意

  1. 条件演算子は、短い文のために便利です。 J-Pの変数の代入は素晴らしい例です:var a = x ? 1 : 2;
  2. 複数の文節は、読みやすくするために別々の行に分かれていなければなりません。
  3. 条件付き演算子は、インデントを正しく指定して複数行の文として読み込むことができますが、ほとんどの開発者にとっては、文法はif/elseです。読みやすさはあなたの読者の期待にマッチしているので、親しみが重要です。

複数行の条件演算子を使用すると、セミコロン挿入エラーが発生することがあります。詳しくは、JSLint documentation(「改行」のセクションを参照)を参照してください。複数行の条件付き演算子を使用する必要がある場合は、演算子が各行の最後にあることを確認してください。

述べたように
(something && somethingElse > 2) ? 
    doSomeLongFunctionName() : 
    doSomeOtherLongFunctionName(); 

、そこに多くのスタイルガイドがあるとあなたが好む方を選択することができます。私はthusly J-Pの複数行の例を手直しします。しかし、いくつかの選択肢は、他の選択肢よりもエラーを起こしやすくなります。間違いなくそのことをよく見てください。JSLint documentation;それは非常によく考えられたスタイルガイドであり、それを遵守すれば、JSLintツールを使用して潜在的な問題のコードを自動的にチェックすることさえできます。