87 votes

Short IF - ELSE statement


J'essaie de rendre mon code plus lisible, j'ai donc décidé d'utiliser une courte SI les déclarations.

Voici mon code qui ne fonctionne pas ("pas une déclaration"):

jXPanel6.isVisible() ? jXPanel6.setVisible(true) : jXPanel6.setVisible(false);

Quel est le problème avec cela? Besoins des crochets? Où?

Merci pour l'aide!

220voto

Andrzej Doyle Points 52541

Le ternaire "expression" x ? y : z ne peut être utilisé pour le conditionnel d'attribution. Qui est, vous pourriez faire quelque chose comme:

String mood = inProfit() ? "happy" : "sad";

parce que le ternaire expression est de retour quelque chose (de type String dans cet exemple).

Ce n'est pas vraiment destiné à être utilisé comme un court, en ligne, if-else. En particulier, vous ne pouvez pas l'utiliser si les différentes parties ne retourne pas une valeur, ou valeur de retour de types incompatibles. (Ainsi, alors que vous pourriez le faire si les deux méthode est arrivé de retourner la même valeur, vous ne devriez pas l'invoquer pour effet secondaire seulement).

Donc la bonne façon de le faire, ce serait juste un if-else bloc:

if (jXPanel6.isVisible()) {
    jXPanel6.setVisible(true);
}
else {
    jXPanel6.setVisible(false);
}

ce qui bien sûr peut être raccourcie à

jXPanel6.setVisible(jXPanel6.isVisible());

Ces deux dernières expressions sont, pour moi, plus lisible en ce qu'ils ont de communiquer plus clairement ce que c'est que vous essayez de faire. (Et en passant, avez-vous des conditions dans le mauvais sens? Il semble que c'est un no-op de toute façon, plutôt que d'un interrupteur).

Ne mélangez pas faible nombre de caractères avec la lisibilité. Le point clé est ce qui est le plus facile à comprendre; et légèrement abuser des fonctionnalités du langage est une manière bien déterminée à confondre les lecteurs, ou au moins de leur faire faire un mental de double-take.

28voto

mauretto Points 1136
jXPanel6.setVisible(jXPanel6.isVisible());

ou dans votre formulaire:

jXPanel6.setVisible(jXPanel6.isVisible()?true:false);

5voto

perdian Points 1325

L'opérateur ternaire ne peut être que le côté droit de l'affectation et non pas une affirmation de sa propre.

http://www.devdaily.com/java/edu/pj/pj010018/

3voto

Comme d'autres l'ont indiqué, quelque chose de la forme

x ? y : z

est une expression, pas un (complète) de la déclaration. C'est une rvalue qui a besoin de s'habituer à un endroit comme sur le côté droit d'une affectation ou d'un paramètre à une fonction, etc.

Peut-être vous pourrait ressembler à ceci: http://download.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X