2017-08-25 7 views
-2

Alors, comment l'opérateur ternaire Java (@Android) est-il censé se comporter?Comment l'opérateur ternaire sous Java (Android) est-il censé se comporter selon la norme?

Vérifiez ces exemples simples:

boolean trigger = true; 
String myStr_NOK = trigger ? "YES:" : "NO:" 
       + " if trigger was TRUE" 
       + " this is NOT visible :-o"); 

String myStr_OK = (trigger ? "YES:" : "NO:") 
       + " if trigger was TRUE" 
       + " this is visible as should."); 

// I think the first comments missed this fact: 
trigger = false; 
String myStr_NOK = trigger ? "YES:" : "NO:" 
       + " if trigger was FALSE" 
       + " this IS concatenated AGAIN"); 

Maintenant, qui est un MasterPeace de la logique Java, que mon cerveau refuse tout avaler.

Avez-vous vraiment besoin d'encapsuler l'opérateur ternaire en Java (Android) entre parenthèses, sinon vous n'obtiendrez pas le reste de la chaîne composée?

Voir: myStr_NOK contient seulement "YES:", puisque l'opérateur ternaire n'était pas entre parenthèses? En this page, il est clairement indiqué qu'aucun parenthèse n'est nécessaire. Comme je m'y attendais légitimement. Quote:

Notez que les parenthèses dans cet exemple sont en option, ...

EDIT: Permettez-moi de reformuler mon Q: Qu'est-ce que la norme dit au sujet de l'opérateur ternaire? Mon observation est telle que, avec toutes les parenthèses autour de l'opérateur ternaire, la concaténation de chaîne supplémentaire est effectuée UNIQUEMENT lorsque l'expression est FAUX. Si VRAI, il ne concatène pas. Quelqu'un trouve-t-il ce comportement significatif, évident et attendu?

Et maintenant mon Q original qui a des downvotes: Qu'est-ce que je me trompe, ou est-ce que le monde est juste devenu fou?

+1

Le monde est tout aussi fou est qu'il a toujours été. Vous interprétez mal cet article, les parens dont il est question ne sont pas les mêmes que ceux que vous essayez d'omettre. Recherchez les règles de priorité d'opérateur si vous voulez savoir pourquoi il se comporte tel qu'il est. – Mat

+0

Merci pour l'indice. Ai-je été déprécié pour avoir été légitimement indigné, de ce que je me suis heurté à ne pas trouver la bonne réponse moi-même? Juste pour savoir si je n'ai pas le droit de demander Q déjà répondu, ou je n'ai pas le droit d'être émotif sur la norme Java ... –

+0

Pas moyen de dire pourquoi vous avez eu une downvote. Mais supprimer les fioritures de vos messages réduira le risque de downvotes des personnes qui n'aiment pas le style. Restez simple et technique. Aussi 99,999% du temps "est-ce que Java (ou C++ ou autre) est cassé?" les questions sont répondues par "non, vous êtes malentendu". Donc, évitez cette formulation aussi. – Mat

Répondre

2

Il ne se comporte pas mal du tout.

Votre premier exemple est essentiellement ce écrit sur:

if(true) "YES"; 
else "NO" + theOtherStrings; 

Votre deuxième exemple est écrit comme ça

String string; 
if(true) string = "YES"; 
else string = "NO"; 
string = string + theOtherStrings 
+0

Je ne vois pas ce que vous voulez dire. –

+0

@Peter L'opérateur ternaire dans le premier exemple manque les parenthèses, ce qui signifie que la première chaîne se compose de 'YES' tandis que la deuxième chaîne se compose de' NO + toutes les autres chaînes suivantes'. Voir ma modification. –

+0

Donc, ce que vous dites essentiellement, c'est que la norme est telle, que lorsqu'il n'y a pas de parenthèse autour de l'opérande ternaire, alors elle concatène la chaîne au-delà de soi SEULEMENT quand l'expression est FAUX? (Lorsque l'expression est VRAI, la contaténation de la chaîne de caractères ne fonctionne qu'avec les crochets. Donc c'est le comportement supposé selon le standard Java? Parce que c'est ce que j'observe .. –