Opérateur ternaire ne doit pas être utilisé sur une seule ligne dans Node.js. Pourquoi?
Considérer les exemples de codes suivants:
1.Exemple de
var IsAdminUser = (User.Privileges == AdminPrivileges)
? 'yes'
: 'no';
console.log(IsAdminUser);
2.Exemple de
var IsAdminUser = (User.Privileges == AdminPrivileges)?'yes': 'no';
console.log(IsAdminUser);
Le 2ème exemple, je suis très à l'aise avec & je code dans ce style, mais il a dit que son mauvaise façon de le faire sans aucun soutien raisons.
Pourquoi est-il recommandé de ne pas utiliser une seule ligne opérateur ternaire dans Node.js?
Quelqu'un peut mettre la lumière sur la raison pour laquelle il en est ainsi?
Merci d'avance pour une grande aide.
OriginalL'auteur Amol M Kulkarni | 2013-02-12
Vous devez vous connecter pour publier un commentaire.
Avec toutes les normes de codage, ils sont généralement pour des raisons de lisibilité et de facilité de maintenance. Ma conjecture est que l'auteur trouve plus lisible, sur des lignes distinctes. Le compilateur /interpréteur pour votre langue va gérer ça tout de même. Aussi longtemps que vous le /de votre projet à un ensemble de standards et de s'en tenir à elle, vous serez bien. Je recommande que les normes de travailler ou au moins examinés par tout le monde sur le projet avant de couler dans la pierre. Je pense que si vous êtes à la rupture sur des lignes distinctes, on peut ainsi définir un if/else bloc conditionnel et l'utiliser.
Méfiez-vous de normes de codage des règles qui n'ont pas de justification.
Personnellement, je n'aime pas l'opérateur ternaire que c'est contre nature pour moi et j'ai toujours de lire la ligne a peu de temps à comprendre ce qu'il fait. Je trouve un autre si/d'autre blocs plus facile pour moi de lire. Préférence personnelle bien sûr.
OriginalL'auteur Stealth Rabbi
Il est en fait de mal à mettre la
?
sur une nouvelle ligne, même si elle ne fait pas de mal dans la pratique.La raison est un JS fonctionnalité appelée “Automatique Point-Virgule Insertion”. Lorsqu'un
var
instruction se termine par un retour à la ligne (sans virgule, qui indique qu'en plus des déclarations sont à suivre), votre JS interprète devrait automatiquement insérez un point-virgule.Ce point-virgule aurait pour effet que la
IsAdminUser
est attribué une valeur booléenne (à savoir le résultat deUser.Privileges == AdminPrivileges
). Après cela, une nouvelle (non valide) l'expression serait de commencer avec le point d'interrogation de ce que vous pensez est un opérateur ternaire.Comme mentionné précédemment, la plupart des JS interprètes sont assez intelligent pour reconnaître que vous avez un saut de ligne, où vous ne devriez pas en avoir un, et implicitement fixer votre opérateur ternaire. Et, lorsque les minifying votre script, le retour à la ligne est supprimée de toute façon.
Donc, pas de problème dans la pratique, mais vous êtes en s'appuyant sur un accord implicite de fixer de commun JS moteurs. C'est mieux d'écrire l'opérateur ternaire comme ceci:
Ou, pour les grandes expressions:
Ou encore:
Avez-vous une source pour appuyer votre demande?
href="http://www.ecma-international.org/ecma-262/7.0/index.html#sec-automatic-semicolon-insertion" >ecma-international.org/ecma-262/7.0/...
OriginalL'auteur lxg
Car il est plus facile sur l'oeil et facile à lire. Il est beaucoup plus facile de voir ce que votre premier extrait est en train de faire un coup d'œil, je n'ai même pas à lire à la fin d'une ligne. Je peux simplement regarder un seul endroit et de savoir quelles sont les valeurs
IsAdminUser
aura pour quelles conditions. La même raison pourquoi vous ne voudriez pas écrire tout un if/else bloc sur une seule ligne.Rappeler que ce sont des les conventions de style et ne sont pas nécessairement soutenus par objectif (ou technique) raisonnement.
OriginalL'auteur Ant P
Je suis complètement en désaccord avec la personne qui a fait cette recommandation. L'opérateur ternaire est une caractéristique standard de tous les " C " style langages (C,C++,Java,C#,Javascript, etc.), et la plupart des développeurs du code de l'oms dans ces langues sont complètement à l'aise avec la ligne unique version.
La première version semble juste bizarre pour moi. Si j'ai été mise à jour du code et a vu cela, je voudrais corriger à une seule ligne.
Si vous voulez verbose, - utiliser des if-else. Si vous voulez soigné et compact, l'utilisation d'un ternaire.
Ma conjecture est que la personne qui a fait cette recommandation n'était tout simplement pas très familier avec l'opérateur, ainsi de suite trouvé déroutant.
OriginalL'auteur user1751825
La raison d'être ? et : sur des lignes distinctes est de sorte qu'il est plus facile de déterminer ce qui a changé si votre source de contrôle dispose d'une ligne-par-ligne de comparaison.
Si vous avez simplement changé les choses entre l' ? et : et tout est sur une seule ligne, la ligne entière peut être marqué comme modifié (en fonction de votre outil de comparaison).
OriginalL'auteur XENOpz