2016-04-10 6 views
0

Недавно я познакомился с тройными операторами. Мне удалось пройти через полтора года в школе CS без профессора, когда-либо упоминавшего троичных операторов. Это моя первая четверть, где мой профессор регулярно их использует. Они кажутся отличными для сокращения кода. Итак, это вопрос, который поможет мне понять границы тройных операторов и когда/как их можно использовать. Есть ли способ сократить следующий блок кода с помощью одного длинного оператора, использующего тернарный оператор?Тернарные операторы (Java)

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

Мое мнение, но я считаю, что код намного читаем, когда операторы окружены пробелами, например. 'несовершеннолетние + = 1;'. Как всегда, существуют исключения, например. этот оператор может быть 'minors ++;', а операторы postfix и prefix не должны быть разделены пробелом от значения, на котором они работают. – Andreas

+0

Мне не нравятся тернарные операторы. Находите их в замешательстве. – BevynQ

ответ

2

Вы можете написать его как одно утверждение:

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

Значение dummy не используется здесь. Это просто способ превратить выражение в утверждение.

Обратите внимание, что я бы не стал рассматривать такую ​​логику на практике. В коде есть несколько побочных эффектов, и это затрудняет понимание.

Я думаю, что намерение вашего текущего кода очень ясно написано. По моему опыту, термины выражают тенденцию усложнять чтение кода.

+0

Тернарный оператор может стать отличной заменой для нескольких присваиваемых * операторов *. Проблема здесь заключается не в нескольких утверждениях, а в том, что они обновляют три разные * переменные *. – Andreas

3

Вы обновляете три уникальные переменные, один способа использовать триады здесь что-то вроде

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

Тройная оператор не подходит для вашего кода, потому что вы меняете 3 различных переменные. Я оставил бы ваш код так, как есть.

Предположим, с другой стороны, что вы должны были это

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

Это может быть переписан, чтобы выглядеть как своего рода switch:

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

Я думаю, что это улучшение на if версия. Тем не менее, это не так, как гнездо тернарных операторов таким образом, поэтому вы можете путать людей, которые смотрят на ваш код, если вы использовали эту версию.