Devrait être placé entre parenthèses toujours autour de l'opérateur ternaire?

StackOverflow https://stackoverflow.com/questions/3620762

  •  26-09-2019
  •  | 
  •  

Question

Checkstyle se plaint de ce qui suit:

return (null == a ? a : new A());

et dit les parens ne sont pas nécessaires.

Alors que la déclaration fonctionne certainement bien sans eux, il semble beaucoup plus lisible avec eux présente --- autrement que je lis, je tends à voir:

return null

d'abord, puis ont de faire une pause pour examiner le reste

== a ? a : new A(); 

partie, puisque mon cerveau a déjà baissé d'un chemin.

En outre, j'ai tendance à faire la même chose lorsque Je vois un opérateur ternaire, à moins qu'il est groupé en parens.

: devrait parens autour du ternaire est la norme de facto? Y at-il jamais une raison de ne pas les mettre là?

Était-ce utile?

La solution

Eh bien, checkstyle est juste, les parenthèses sont inutiles pour l'exécution. Mais inutile pour l'exécution ne signifie pas inutile pour la bonne lecture de votre code. Vous devriez les laisser s'il est plus logique de lire.

Je pense que ce code n'a pas besoin de plus entre parenthèses:

int number = (myBoolean)? 1 : 2;

mais dans votre cas, le mot-clé return et le fait que votre booléenne est une expression peut changer la façon dont vous avez lu la déclaration.

Autres conseils

Lors de la lecture d'une déclaration de retour, je sais que tout entre « retour » et « ; » est ce que va être retourné, donc il n'y a aucun moyen que je peux lire votre exemple de code comme nul retour suivi de quelques symboles que vous prétendez que vous lisez.

Peut-être lire sur des techniques d'analyse syntaxique peut vous aider à voir ce que je fais. Cela dit, je ne l'ai pas vraiment lu sur les techniques d'analyse syntaxique, bien que j'ai bricolé quelques parseurs ensemble au cours des années.

Je retire toujours entre parenthèses inutiles. Ils ne sont pas aider dans la compréhension du code, comme je sais que l'opérateur de Java de priorité assez bien. Le temps étrange que je ne suis pas sûr, j'ajouter entre parenthèses et attendre de voir si IDEA me dit qu'ils sont redondants. Puis je les supprimer, et essayer de garder en mémoire la règle de priorité que je viens de découvrir.

Dans les codebases j'ai hérité, je tends à trouver le plus grand nombre de parenthèses redondantes dans les zones de code qui sont pauvres pour d'autres raisons, donc j'associe les deux.

Non, il ne devrait pas être la norme de facto. Je préfère sans parens.

Je pense que la seule raison de les mettre à l'ordre il y a d'évaluation de la force ou de clarifier une ligne confusion.

Les deux options sont correctes, utiliser ce que vos utilisations de l'équipe ou ce que vous aimez si vous travaillez seul.

IIRC Par checkstyle par défaut utilise les directives de style de Sun (de r.i.p), donc si vous voulez être conforme au style standard, écouter et retirer les parens.

En général, pas .

Parenthèses sont pas nécessaire autour ternaire (également connu sous le nom conditionnel) opérateurs ou ses sections, parce que leur priorité est donc très faible dans l'ordre des opérations (juste au-dessous des opérateurs logiques et au-dessus des missions). Voir le lien ci-dessous pour le tableau complet.

On pourrait faire valoir, par conséquent, que ces parens inutiles visuellement l'encombrement le code, et ils révèlent une manque de compréhension de la part du programmeur.

Les exceptions qui pourraient nécessiter l'utilisation de parens dans ou autour ternaires seraient:

  • Si votre ternaire est assez complexe pour mériter plusieurs lignes; vous pourriez alors entourer votre déclaration parens afin d'éviter l'insertion automatique de points-virgules.

  • Si votre ternaire est imbriqué dans un autre ternaire.

Voir aussi sur MDN:

Depuis la base de votre question a à voir avec l'acte de lecture de code, je vais aborder la question dans cette perspective.

L'un des principes fondamentaux de la soi-disant « lecture rapide » des programmes de formation est qu'ils essaient d'amener le lecteur à développer un gestalt de la ligne de texte plutôt que de le lire de manière séquentielle mot: par mot. Vous pouvez essayer de prendre une page de leur livre et pas en arrière de votre code - littéralement, si besoin selon pour avoir une idée de la ligne complète plutôt que de traiter l'acte de lecture comme si elle était l'acte d'analyse syntaxique jeton par jeton.

Sinon, vous pouvez utiliser un éditeur qui vous permet de configurer les styles: vous pourriez faire l'opérateur ternaire une couleur différente de sorte qu'il vous saute au visage. Notepad ++, par exemple, a un certain nombre de thèmes intégrés qui font cela, comme beaucoup d'autres éditeurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top