2016-04-10 2 views
0

J'ai été récemment présenté aux opérateurs ternaires. J'ai réussi à traverser un an et demi d'école CS sans qu'un professeur ne mentionne les opérateurs ternaires. C'est mon premier trimestre où mon professeur les utilise régulièrement. Ils semblent parfaits pour raccourcir le code. Donc, c'est une question qui m'aidera à comprendre les limites des opérateurs ternaires et quand/comment ils peuvent être utilisés. Existe-t-il un moyen de raccourcir le bloc de code suivant en utilisant une longue instruction utilisant un opérateur ternaire?Opérateurs ternaires (Java)

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

Mon avis, mais je trouve que le code est beaucoup plus lisible lorsque les opérateurs sont entourés par des espaces, par exemple. 'mineurs + = 1; Comme toujours, il existe des exceptions, par ex. cette instruction pourrait être 'minors ++;' et les opérateurs postfix et prefix ne devraient pas être séparés par un espace de la valeur sur laquelle ils travaillent. – Andreas

+0

Je n'aime pas les opérateurs ternaires. Trouvez-les confus. – BevynQ

Répondre

2

Vous pouvez l'écrire comme une seule instruction:

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

La valeur de dummy est utilisé ici. C'est juste un moyen de transformer l'expression en une déclaration.

Notez que je ne considérerais pas écrire la logique comme ceci dans la pratique. Il y a plusieurs effets secondaires dans le code, ce qui le rend difficile à comprendre.

Je pense que l'intention de votre code actuel est très claire comme écrit. Les expressions ternaires ont tendance à rendre le code plus difficile à lire, selon mon expérience.

+0

L'opérateur ternaire peut être un bon remplaçant pour plusieurs instructions d'affectation *. Le problème ici n'est pas les multiples instructions, mais le fait qu'elles mettent à jour trois variables * différentes *. – Andreas

3

Vous mettez à jour trois variables uniques, une façon d'utiliser ternaires ici est quelque chose comme

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

L'opérateur ternaire est pas un bon ajustement pour votre code parce que vous changez 3 variables différentes. Je laisserais ton code tel qu'il est.

On suppose que, d'autre part, que vous avez eu cette

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

Cela pourrait être réécrite pour ressembler à une sorte de switch:

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

Je pense que c'est une amélioration du if version. Cependant, il n'est pas courant d'imbriquer des opérateurs ternaires de cette manière, ce qui peut créer de la confusion chez les personnes qui regardent votre code si vous utilisez cette version.