2009-05-15 22 views
18

Böyle bir deyim gibi koşullu operatörleri kullanmak tamam mı?Javascript'te Koşullu Operatörler

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

Yoksa böyle bir değer atamak daha doğru mu?

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

Bir ifade gibi kullanmak yanlış değilse, o zaman böyle bir yürütme için birden fazla kod satırı eklemek mümkün mü? Birden çok kod satırı için ifadeler kullanıp kullanmaya devam etmek daha doğru mu?

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

Sözdizimi bir nedenden dolayı var - Sorun değil. – Cerebrus

+0

Bir şeyler yapmanın etkili ya da daha uygun bir yolu olduğunu bilmek için yeterince bilgiye sahibim. Sadece çoğu zaman ne olduklarını bilmiyorum! herkese teşekkürler, içerde! Bu yüzden şartlı operatörler ve çoklu ifadeler muhtemelen karışmamalıdır. anladım. – baokhangluu

cevap

25

Koşullu operatörleri atamaları için kasten öz ve özellikle yararlıdır: bunları kullanma

var a = x ? 1 : 2; 

şartlı, aynı zamanda olabildiğince fonksiyonlarını çalıştırmak için, okunabilirlik uğruna/IF ELSE ifadeleri kullanılarak yapılmalıdır:

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

iken uzun soluklu çoğu zaman, bu daha iyi bir çözümdür,:

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

IF/ELSE yapısındaki dikkate değer bir fayda, her koşul altında minimum güçlükle ek görevler ekleyebileceğinizdir.

Son snippet'iniz de mümkündür, ancak uzunca bir şekilde sarılmış ve yine daha geleneksel bir mantıksal yapıya daha uygun olabilir; bir IF/ELSE bloğu gibi.Bu, bir koşullu operatörün, örneğin,

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

Nihayetinde, birçok şey gibi, kişisel tercihlere düşer. Her zaman yazdığınız kodun sadece sizin için olmadığını unutmayın. Gelecekte diğer geliştiriciler de bunun içinden geçmek zorunda kalabilirler; mümkün olduğunca okunabilir hale getirin.

2

Ya kabul edilebilir:

Kenara ben satırlı tablolar için koşullu bir satır içinde kullanırken tavsiye asla gelen
alert((x == y) ? "yo!" : "meh!"); 

, sadece bir standart kullanırlar/else if blok. Girdiğiniz sözdizimi göz önüne alındığında geçerli bir JS de değil, birden çok ifadeyi anonim yöntemlere yerleştirmiş olabilirsiniz, ya da, ya da, neredeyse yönetilemez ve gereksiz yere zor bir kodla karışık bir karmaşaya girebilirsiniz. Yani yine, standart/else.

+0

teşekkürler! Bunu nasıl optimize edeceğimi düşünmüyordum, ama bu harika. İfadeleri kullanabilmeleri için hala batmasına izin vermem gerekiyor. – baokhangluu

4

JavaScript yapıyor engellemez, ancak kodunuzu okuyan herkes karıştıracaktır çok bir olağandışı bir uygulamadır.

koşullu operatör

hemen her zaman iki alternatif değerler değil, ifadeleri seçmek için kullanılır. İfadelerin koşullu dallanması için bir if bildirimi tercih edilir.

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

Ama lütfen yapma: Eğer gerçekten gerekiyorsa

son soruya ilişkin olarak, evet, sen [] yapısı kötüye kullanabilir. 8-) Bu tamamen size bağlıdır

4

, bunu iki şekilde yapabilirsiniz. Yine de kendinize sormalısınız, bu tarz şirket yönergelerini takip ediyor ve bu kodun ne kadar okunabilir olmasını istiyorsunuz?

ifadeleri yolu daha okunabilir olup olmadığını kullanma.

Şahsen ben sadece basit ve hızlı doğru/yanlış koşulları için üçlü operatörü kullanabilirsiniz - veya bir şeye ihtiyacım "inline" - Bunu yaparken mantıklı olduğu.

2
Chris ve J-P hem katılıyorum

:

  1. Koşullu operatörleri kısa açıklamalardan kullanışlıdır. J-P'nin değişken ataması mükemmel bir örnektir: var a = x ? 1 : 2;
  2. Çok bildirimli tümceler okunabilirlik açısından ayrı satırlara ayrılmalıdır.
  3. Koşullu işleçler, doğru girintiyle çok satırlı ifadeler olarak okunabilir, ancak if/else sözdizimi, çoğu geliştiriciye daha aşinadır. Okunabilirlik, okuyucunuzun beklentilerini eşleştirmekle ilgilidir, bu nedenle aşinalık önemlidir.

ben çok satırlı koşullu operatörler yerleştirme hatalarını noktalı virgülle açık bırakmanız ekleyecektir. Bu konuda daha fazla bilgi için JSLint documentation'a bakın ("Hat Kesilmesi" konusuna bakın). Çok satırlı bir koşullu operatör kullanmanız gerekiyorsa, operatörlerin her satırın sonunda olduğundan emin olun.

bahsedildiği gibi
(something && somethingElse > 2) ? 
    doSomeLongFunctionName() : 
    doSomeOtherLongFunctionName(); 

, orada birçok stil kılavuzları vardır ve hangisi tercih seçebilirsiniz: Ben thusly J-P'nin çok satırlı örneğini yeniden işleme olacaktır. Bununla birlikte, bazı seçenekler diğerlerine göre daha fazla hataya açıktır. Kesinlikle JSLint documentation; Çok iyi düşünülmüş bir stil rehberidir ve eğer buna uyursanız, JSLint aracını kullanarak potansiyel sorunlarınız için kodunuzu otomatik olarak kontrol edebilirsiniz.