İf-else kısayolunu kullanırken ikinci ifadeyi atlama


290

if elseStenografi olmadan yazabilir miyim else?

var x=1;

x==2 ? dosomething() : doNothingButContinueCode();   

nullBaşka işler için koymak fark ettim (ama neden ya da bu iyi bir fikir olup olmadığı hakkında hiçbir fikrim yok).

Edit: Bazılarınız neden bu denemek rahatsız olur şaşkın görünüyor. Sadece meraktan emin olabilirsiniz. JavaScript ile uğraşmayı seviyorum.


Bence bir var | varsözdizimi var. "Görmek" potansiyel olarak zordur, özellikle (IMO) üçlüleri sorunludur. Dikkatli kullanın.
Jared Farrish

@JaredFarrish Üçüncülerin, "ifadelerini" görmeleri, if ifadelerini kullanmaktan daha kolay değil mi? Ayrıca bahsettiğiniz sözdizimi nedir, ilginç görünüyor.
Hassan

1
Hayır, her durumda daha kolay olduklarını düşünmüyorum. Aklımdaki "bütün mesele", ya hepsini tek bir satıra ("kodları sizinkinden daha kısa") koymak ya da basit sonuçları olan belirli, gerçek durumlar için. Üçlüleri istiflemek özellikle zararlı ve her ne pahasına olursa olsun kaçınılmalıdır. :)
Jared Farrish

1
@Hassan - Bir şey gördüm foo = bar | cat;, ilk yanlışsa nerede? null ?, ikincisine "düşer". Ben sadece gördüm, ve kullanmayın.
Jared Farrish

3
@JaredFarrish: Bu a || bya da a && baksi takdirde bher zaman değerlendirilecektir.
kennytm

Yanıtlar:


263

Bu da bir seçenektir:

x==2 && dosomething();

dosomething()yalnızca x==2doğru olarak değerlendirilirse çağrılacaktır . Buna Kısa devre denir .

Bu gibi durumlarda yaygın olarak kullanılmaz ve gerçekten böyle bir kod yazmamalısınız. Bu daha basit yaklaşımı teşvik ediyorum:

if(x==2) dosomething();

Her zaman okunabilir kod yazmalısınız; Dosya boyutu konusunda endişeleniyorsanız, birçok JS kompresöründen birinin yardımıyla küçültülmüş bir sürümünü oluşturun. (örneğin, Google'ın Kapanış Derleyicisi )


10
Kısa devre, doğru. Kodun okunabilirliği takdir ediliyor, çoğu orta düzey geliştiricide ve bazı "deneyimli profesyoneller" de düşünüyorum.
Jared Farrish

2
Teknik olarak parantezlere ihtiyacınız yok: if (1 - 1 === 0) $('.woot').text('Woot!'); PHP ile her zaman bu formu kullanıyorum ve şimdi Coffeescript'i benimsediğime göre, Javascript'imde de kullanıyorum.
hollenbeck

5
Şahsen inanıyorum eğer küçük bir eğer doğruysa bir sonuç ile .. daha hızlı ve daha kolay yazmak x == 2 && dosomething ();
Dean Meehan

9
if x==2 && doSomething() || doSomethingElse()
Agustín

1
JavaScript Bu Yakut benzeri sözdizimi dahil dilek: doSomething() if x === 2. Ruby'yi özlemiyorum, ama bunu özlüyorum.
Chad Johnson

743

Üçlü operatörünüzün alışılmadık bir kullanımı var . Genellikle başka bir işlemin içinde bir ifade olarak değil, bir ifade olarak kullanılır, örneğin:

var y = (x == 2 ? "yes" : "no");

Bu nedenle, okunabilirlik için (yaptığınız şey olağandışı olduğu için) ve istemediğiniz "başka" öğesinden kaçındığı için şunu öneririm:

if (x==2) doSomething();

Burada tam komut olarak eklenen bitiş çizgisini ekleyebiliriz (örneğim jquery fade in ve fade out işlevini kullan) x == 2? $ (element) .fadeIn (): $ (element) .fadeIn (); Bir dönüş değişkeninin olması zorunlu değildir (ilk koddaki var y gibi).
Prageeth Godage

1
mantığın mükemmel olması için üçlü "=" işaretlerini kullanmalısınız. var y = (x === 2? "evet": "hayır") gibi;
fino



14

nullÜçlü ifadenin dallarından biri için kullanmak iyidir. Üçlü bir ifade Javascript'te bir ifade olarak iyidir.

Bir stil meselesi olsa da, bir prosedürü çağırmayı düşünüyorsanız, bunu if..else kullanarak yazmak daha açıktır:

if (x==2) doSomething;
else doSomethingElse

veya sizin durumunuzda,

if (x==2) doSomething;

6

Bu çok eski konuya küçük bir ek ..

Your'e bir iç bir ifade değerlendirmek durumunda for/ whileüçlü operatör ile döngü ve istediğiniz continueveya breaksonuç olarak - her iki yüzünden bir sorun var olacak continueve breakolmayan ifadeler onlar konum ifadeleri hiçbir değeri olmayan.

Bu üretecek Uncaught SyntaxError: Unexpected token continue

 for (const item of myArray) {
      item.value ? break : continue;
 }

Gerçekten bir deyim döndüren bir satırlık istiyorsanız, bunun yerine bunu kullanabilirsiniz:

  for (const item of myArray) {
      if (item.value) break; else continue;
  }
  • Not - Bu kod bazı kaşları artırabilir. Sadece söylüyorum.. :)

4

Teknik olarak, null veya 0 veya sadece rastgele bir değer koymak işe yarar (dönüş değerini kullanmadığınız için). Ancak, neden yapı yerine bu yapıyı kullanıyorsunuz if? Bu şekilde kod yazarken ne yapmaya çalıştığınız daha az açıktır, çünkü insanları no-op (kafanızda null) ile karıştırabilirsiniz.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.