2012-01-06 2 views
4

私はよく見るなど、使用コード:条件演算子の内部でコードを実行するのは安全ですか?

var myvar = (1 < 2) ? 3 : 4 ; //if 1 < 2 then myvar = 3, else = 4 

しかし、私はちょうど最近だけif(){}else{}の交換のいくつかの種類のようなコードを実行していたコード、見た:

例:

(1 < 2) ? alert("example1") : alert("example2"); 

私に来た最初の考えは、「うわー、これは6-7文字短く」、「可能性の無限」、「これは私の一日を作った」などでした。

私の質問:

  • を使用するには、この事のエラーのない、安全ですか? (のような、内部に多くのコード、およびネストされたもので)

今のところ、私は通常の方法でそれを使用し続けるだろう、私はコードの断片を実行するためにそれを使用して起動した場合、そのかもしれない恐怖を持っていますうまくいかない。

+0

私の意見では、短い命令の場合にのみ、その3値条件を使用する必要があります。 true条件またはfalse条件に属するコードブロックについては、if {} else {}を使用するべきですが、それは私の意見です。私はこの三項状態を使うための最良の方法にも興味があります。 –

答えて

4

いくつかの例外があります。例えばifforwhiledo、またはtry

よう

  • break
  • continue
  • 任意のブロックを:あなたがこれを行うことはできません。業務のご注文で、それができるの混乱多くはである何:

    x < 3 ? l = true : r = true; // Syntax error, = has lower precedence than ?: 
    

    しかし、それはそれは醜いだからだと、それをしない理由はありません。どちらこれは、あなたに明確である:

    if(i > 5) { 
        alert('One'); 
    } else { 
        alert('Two'); 
    } 
    

    または

    i > 5 ? alert('One') : alert('Two'); 
    

    ?それは間違いだよね?そして文字を保存することは決して何もする理由ではありません。それ以外の場合は、コメントや空白がありません。可能であれば、Google Closure Compilerのような優れた小型化ツールが自動的にこれらのファイルを変換します。保存する場所は他にもたくさんあります。結局のところ、あなたが最も便利で読みやすいものが見つかるだけです。

    また、breakcontinueなどが必要になった場合、それはむしろ一貫性がなく魅力的ではありません。

+0

他の誰もが存在していることを明らかに指摘した例外があるためまたは少なくとも、彼らはすべて、ちょうど彼らの答えに言及しないことを慎重に決めた) – ajax333221

7

これはエラーがなく安全ですか? (たくさんのコード の中、ネストされたものなど)

はい。しかし、その中にあるコードが多いほど、読みにくくなります。

簡潔で簡潔なステートメントのために条件付き演算子を使用することをお勧めします。より複雑なものは、読みやすさとメンテナンス性のためにif/elseに相当します。

+0

私は通常、プロジェクトを作るときに2つのバージョンを持っています。オリジナルは長いvarの名前ともの、そしてより少ないコードが可能です。 (私は2番目にこの種の方法を使うつもりです) – ajax333221

+1

興味深い。なぜ2番目のものも持っているのですか?私にとって、それは単に維持するためのより多くのコードでしょう。あなたが特にjavascriptをターゲットにして、2番目のものとminificationをしているのであれば、すでにそれを行うことがあります。 :) –

+0

私はJSのminifierを知っていますが、私はこのメソッドで/ elseを小さくすることはできません。 – ajax333221

2

あなたはternary演算子を参照しています。これは通常、このような単純な文字列と変数を設定するために使われています:

var phone = old ? "blackberry" : "iPhone" 

それずっと簡単使用するよりも場合:

var phone = "iphone" 
if (old) { 
    phone = "blackberry" 
} 

それはそれとして、すぐにあなたが説明した例では、この文脈では良いことだと混乱するようになったり、私は間違いなくそれをお勧めしません!

あなたの例では、より良い、このように作られることがあります

var msg = 1 < 2 ? "alert1" : "alert2"; 
alert(msg); 
1

また書くことができます:

alert(1<2? "example1" : "example2"); 

を、例えば、三元opertatorは、単純な場合のために設計されて、時々、開発者が夢中と複数のif..else文を置き換えるためにそれを使用します

var someVal = foo < bar? 'yes' : bar > fum? : fum : fi != fee? fi : fee; 

これは良い考えではありませんIMHO。