2010-11-06 35 views
5

ilk etapta üçlü koşullu operatörü nefret ediyorsan, cevap gerek yoktur Operatör ve Stil;Üçlü (Koşullu)

Genellikle böyle bir atama ifadesi ile birlikte kullanılan bakınız):

var foo = (some_condition) ? then_code : else_code; 

Ancak, ben gibi basit kodunu değiştirmek için kullanabilirsiniz istiyorum: yerine

if(some_condition) { 
    do_something_simple; 
} else { 
    do_something_else; 
} 

ve yapın:

(some_condition) ? do_something_simple : do_something_else; 

Bunu muhtemelen JavaScript’de yapıyorum. Yukarıdaki ifadede undefined, ödevi gerektirmez. Kaydedilen alanı sevdim ama insanların bu tür kullanım hakkında ne düşündüklerini merak ediyorum, yine de, genellikle yalnızca bir ödevle kullanılan üçlüyü görüyorum.

DÜZENLEME: "Niyeti gizleme" ye işaret eden yanıtlar gördüm. İfadelerde klasik olarak kullanılmasına rağmen, bu nasıl bir ifadeyi daha sonra gizlemekte? Özellikle dinamik bir dilde, yer yer üçlü operatörlerin kullanılmasını görebilir miyiz?

+0

Yinelenen Soru. Lütfen her zaman daha önce sorulmuş ve cevaplanmış soruları frist'e bakın. Bağlantı şu şekildedir, yardımcı olup olmadığına bakın: http://stackoverflow.com/questions/3622244/full-if-else-statement-vs-conditional-operator –

+2

İpucu: Bu özel üçlü operatörün genellikle koşullu operatör. Bir "üçlü" operatör, sadece 3 işlenen bir operatördür, dolayısıyla "üçlü" kelimesidir. Çok sayıda üçlü operatör yoktur, ancak birden fazla dili olan koşullarda, koşullardan biri bunlardan sadece biridir. –

+0

@Mazhar: Bu soru '?:' Ifadesini, ifade düzeyinde bir seçim olarak kabul edilen normal yöntemle kullanmakla ilgilidir. Bu, “if-else” in yerine geçmek için aktif yan etkileri yürütmek üzere “::” nin kötüye kullanılmasıyla ilgilidir. Şahsen bu uygulamadan çok nefret ediyorum. – bobince

cevap

3

Koşullu operatör normalde ifadelerde - değer üreten ifadelerde - kullanılmalı ve en iyi 'if/then/else' ifadesinin yerine kullanılmamalıdır. Bazen, belirli bir sorun olmazdı; sistematik olarak kullanıldığında, bu kodun amacını okuyuculardan gizleyeceğini düşünüyorum.

+0

bu yüzden neden kullanılamayacağına dair teknik bir sebep yok. – dewd

+0

Ayrıca, (1) koşullu ifadelerin anahtar değerinin ** koşullu ifadelerin içermediği bir şekilde ** oluşturdukları ve (2) zorunlu bir üslup içermedikleri, işlevsel bir JavaScript deyimi arasında ayrım yapmaktan başka, ifadeler her zaman gerekli değildir ve ifadeler genellikle yeterli olacaktır. – houthakker

2

Bu benim kişisel tercihi: Bu durumda

, ben "insanların okuması için değil makine için, yazılı kodu" o düşünce içine düşüyor düşünüyorum. Çoğu insan bu şekilde if then else yazmamasından dolayı, karışıklığa, kodun anlaşılması için zamanın artmasına ve muhtemelen hataların ortaya çıkmasına neden olabilir - eğer birileri bunu gördü ve düşündü, herhangi bir şeye atama yoksa "sola" olmalı kod ve onu kaldıralım, daha sonra kod temizliği hata girişine dönüşür.


Şunlardan alıntı yapıldı: Programlar, insanlar tarafından okunacak ve yalnızca makinelerin yürütülmesi için tesadüfen yazılmalıdır. bilgisayar çalıştırmak etmezse, bozulmuş

: -

Abelson ve Sussman'a

Charlie Martin tarafından "Bilgisayar Programları Yapısı ve Yorumlanması" dan Is Code For Computers or for People? söyledi. İnsanlar bunu okuyamazsa, kırılacak. Yakında.

Ve bence evet, makinenin anlaması (ve düzgün bir şekilde çalışması) için kod yazılıyor ve insanların anlaması da önemlidir. (danışmanlık ücreti almak için kasıtlı olarak zor yazılmadığı sürece, ancak daha sonra veya bir sonraki proje için bir başkasını işe alabilir veya iş güvenliğinizi anlamak için kasıtlı olarak zor yazılmışsa, insanlar sizin kodunuzu iyi anlayamazlarsa, t diğer insanlar korkusu tutamazsınız korkuyorum ... belki bir şey için 2 tarafı var ... ben daha fazla ve daha fazla durum görüyorum)

+0

Vay, eğer oldukça saldırgan IMO gibi görünen "sol" koduna göre çıkarsalardı. Alıntı ilginçtir, ancak önerilen kullanımın aslında kod okuyucusunu karıştırdığını varsayar. Ancak, aslında daha okunaklı hale getirmek daha az çizgidir gerçeği? Emin değilim;) – Rob

+0

hm ... daha az çizgi mutlaka daha okunabilir yapmaz. Örneğin, 35 satırlık bir program, 3 satırdan daha karmaşık olabilir, ancak bu kod-golf 1-liner'ın bir kısmı anlaşılması zor olabilir. –

0

Sorun, çünkü JavaScript hakkında konuşuyorsunuz aptalca Bu garip şeylere izin verir.

Klasik bir programlama dilinde, üçlü koşullu işleç, her iki durumun da ifade değil ifadedir. Bu şekilde, bir boole koşuluna göre iki ifade arasında seçim yapmak için kullanabilirsiniz, ancak normal/else dalı olarak değil ..

JavaScript gibi bir dilde bu fark ortadan kalkıyor çünkü bir deyim aslında bir değer döndürüyor, böylece üçlüyü kullanabilir ve ifadeniz tarafından döndürülen undefined değerini atmanız yeterlidir.

Diğer programlama dillerine daha çok yer veren bakış açımdan, eğer alandan tasarruf ederseniz de bu bir karışıklığa yol açabilir ama bence bu bir tercih meselesi. Sadece birkaç programlama dili üçlü operatörün bu tür kullanımına izin verdiğinden beri buna alışmayın!

+0

> aptalca - Sanırım bu yüzden sordum. Onu daha klasik dillerde görmüyorum ama evet, JS'ye izin verilir. – Rob

0

Üçüncül operatör, sürekli değişen ortamlarda değil, olgunlaşmış/kararlı programlar için iyidir. Herhangi bir dalda fazladan bir kod eklemeniz gerektiğini varsayalım - eğer/sonra/else sözdizimi varsa çok daha kolay.

+0

Bence olgun bununla ilgili bir şey yok. Çok basit şartlar için iyi olduğunu tartışmak için yeniden ifade ediyorum IMO – Rob

+0

Bazı beklenmedik zamanlarda uzatmak için çok basit bir durum gerekebilir. – Thevs