2016-04-10 22 views
0

Son zamanlarda üçlü operatörlere tanıtıldım. Üçüncü sınıf operatörlerden bahseden bir profesör olmadan bir sene boyunca CS okulunu başardım. Bu benim profesörün onları düzenli olarak kullandığı ilk çeyreğim. Kod kısaltmak için harika görünüyorlar. Yani, bu, üçlü operatörlerin sınırlarını ve ne zaman kullanılabileceklerini anlamama yardımcı olacak bir sorudur. Bir üçlü operatör kullanarak uzun bir deyim kullanarak aşağıdaki kod bloğu kısaltmanın bir yolu var mı?Üçlü Operatörler (Java)

if(age < 18){ 
    minors+=1; 
} else if(age < 65){ 
    adults+=1; 
}else{ 
    seniors+=1; 
} 
+0

Düşüncelerim, ancak, işleçler boşluklarla çevrili olduğunda kodun daha okunabilir olduğunu buluyorum, ör. küçükler + = 1; Her zaman olduğu gibi, istisnalar vardır, ör. Bu ifade 'minors ++' olabilir ve postfix ve prefix operatörleri, üzerinde çalıştıkları değerden boşlukla ayrılmamalıdırlar. – Andreas

+0

Üçlü operatörleri sevmem. Onları kafa karıştırıcı bul. – BevynQ

cevap

2

Tek bir ifadesi olarak yazabilir: dummy değeri burada kullanılmamış olan

int dummy = (age < 18) ? (minors += 1) 
      : (age < 65) ? (adults += 1) 
      :    (seniors += 1); 

. İfadeyi bir ifadeye dönüştürmenin bir yolu.

Pratikte mantığı böyle yazmayı düşünmeyeceğimi unutmayın. Kodda çok sayıda yan etkisi vardır ve bunu anlamak zorlaştırır.

Geçerli kodunuzun amacının yazılı olduğu kadar açık olduğunu düşünüyorum. Üçlü ifadeler benim deneyimimde kodu okumayı zorlaştırıyor. Üç benzersiz değişkenler, burada ternaries kullanmak tek yolu güncelliyoruz

+0

Üçlü operatör, çoklu ödev * ifadeleri * için harika bir yedek olabilir. Buradaki problem, çoklu ifadeler değil, üç farklı * değişkeni güncellemeleri gerçeğidir *. – Andreas

3

kodunuz için üçlü operatörü iyi bir uyum değil

minors += (age < 18) ? 1 : 0; 
adults += (age >= 18 && age < 65) ? 1 : 0; 
seniors += (age >= 65) ? 1 : 0; 
0

gibi bir şey 3 farklı değişkenler değişiyor çünkü. Kodunu olduğu gibi bırakırım.

varsayalım, sen bu yeniden yazılabilir

if (age < 18) { 
    number += 1; 
} else if (age < 65) { 
    number = 8; 
} else if (age < 90) { 
    number += 2; 
} else { 
    number = 13; 
} 

bu switch bir tür gibi bakmak zorunda Öte yandan, bu: Ben bu if üzerinde bir gelişme olduğunu düşünüyorum

number = age < 18 ? number + 1 : 
     age < 65 ? 8   : 
     age < 90 ? number + 2 : 
        13; 

sürümü. Ancak, üçlü operatörlerin bu şekilde yerleştirilmesi yaygın değildir, bu yüzden bu sürümü kullandıysanız kodunuza bakacak kişileri şaşırtabilirsiniz.