2012-02-21 24 views
1

として使用して、インスタンスのために、JavaScriptで長い条件文の代わりに三項演算子を使用してに何か問題があります:三項演算子短い条件文

(variable == "dog") ? dog_stuff() : false; 

よりもむしろ

if (variable == "dog") 
{ 
    dog_stuff(); 
} 

これはのように聞こえるかもしれ愚かな質問ですが、私はそれがかなり速くて読みやすいと思っています、私はちょうどそれが可能性のある欠点がある場合、それを使用したくないですか?

+0

あり –

+0

@Michael、 '?'の左にあるオペランドは条件付きで、何も返さない。構造全体は? b:c'は式です。このケースでは、副作用が評価され、その戻り値は破棄されているので、奇妙に見えます。 –

+0

@IanClellandええ、私の目は '='のままになっている '(変数=="犬 ")を見ていたので、意味がありません。まもなく削除... –

答えて

5

あなたはelseステートメントを持っていない場合にも、

(variable == 'dog') && dog_stuff(); 

を書くことができます。

BACKBONE.JSから数行:

options || (options = {}); 
    models = _.isArray(models) ? models.slice() : [models]; 
    model = this.getByCid(models[i]) || this.get(models[i]); 

グループ化できます複数のステートメント、それは非常に必要だとします。あなたと他の誰である限りフォーマットが容易に理解されるよう

(1==1) && (a=2,b=3) 
alert(a); // 2 
alert(b); // 3 
+0

機能が似ているように見えますが、機能を結合するにはきちんとしています – Mikhail

+0

おかげで、私が探していたものとまったく同じです。 – Dormouse

+0

私はそれを賢明に+1しましたが、正直に誰もこれをするべきではありません。 IMOの効率性は、可読性を下げるに足る価値はありません。これについて+1 – Mikhail

1

コードを読む必要があるかもしれませんが、それは問題ありません。

+0

+1 10文字は短くてもかまいませんが、あまりにも巧妙なものには明確で簡潔なコードを書く方が良いでしょう。 – Stephen

3

falseを実行するようにコードに指示しているので間違いです。次のコードを想像してみて:

if (variable == "dog") 
{ 
    dog_stuff(); 
} else { 
    false; 
} 

IMO 4行の条件付き関数の呼び出しは完全に罰金です。あなたはそれをコメントアウト、または1つの以上の機能を追加した場合、その後、物事が正しいように見えますが、正しく実行されません。これで唯一の問題はある

if (variable == "dog") dog_stuff(); 

:あなたはそれを速記することができます

if (variable == "dog") dog_walk(); dog_bark(); // dog_bark executes always! 
if (variable == "dog") // dog_walk(); 
earn_cash(); // suddenly earn_cash() is dog-dependent. 
+0

私はいつもこれを理由に条件文を短縮するのを心配してきましたが、私は三項演算子を使ってかなり明確にし、不確実な依存関係についての心配を取り除くように感じます。 – Dormouse

+0

私は通常、ブレースをインラインで入れます: 'if(condition){execute(); } ' – Mikhail