Une fois, j'ai entendu dire que laisser les accolades dans des déclarations sur une ligne pouvait être nuisible en JavaScript. Je ne me souviens plus du raisonnement et une recherche sur Google n'a pas beaucoup aidé.
Y a-t-il quelque chose qui fait que c'est une bonne idée d'entourer toutes les instructions entre accolades en JavaScript?
Je demande, car tout le monde semble le faire.
javascript
La tour
la source
la source
Réponses:
Non
Mais ils sont recommandés. Si jamais vous développez la déclaration, vous en aurez besoin.
C'est parfaitement valable
Cependant, il est fortement recommandé de toujours utiliser des accolades, car si vous (ou quelqu'un d'autre) développez un jour l'instruction, elle sera requise.
Cette même pratique s'applique à tous les langages de style syntaxique C avec accolades. C, C ++, Java, même PHP prennent tous en charge une instruction de ligne sans accolades. Vous devez réaliser que vous n'enregistrez que deux caractères et qu'avec les styles de contreventement de certaines personnes, vous n'enregistrez même pas une ligne. Je préfère un style d'accolade complète (comme suit), donc il a tendance à être un peu plus long. Le compromis est très bien réalisé avec le fait que vous avez une lisibilité du code extrêmement claire.
la source
Il y a un aspect de lisibilité - en ce que lorsque vous avez des instructions composées, cela peut devenir très déroutant. L'indentation aide mais ne signifie rien pour le compilateur / interpréteur.
Et puis il y a un aspect d'extensibilité:
On pense que si vous avez toujours les crochets, vous savez insérer d'autres instructions à l'intérieur de ce bloc.
la source
if (a===true) alert(a);
. Maintenant c'est clair!La question porte sur les déclarations sur une seule ligne. Pourtant, les nombreux exemples fournis montrent des raisons de ne pas omettre les accolades basées sur des instructions sur plusieurs lignes. Il est tout à fait sûr de ne pas utiliser de parenthèses sur une seule ligne, si c'est le style de codage que vous préférez.
Par exemple, la question demande si cela est correct:
Il ne demande pas si cela est correct:
Je pense qu'il est préférable de laisser les crochets car cela rend le code plus lisible avec une syntaxe moins superflue.
Mon style de codage est de ne jamais utiliser de crochets à moins que le code ne soit un bloc. Et de ne jamais utiliser plusieurs instructions sur une seule ligne (séparées par des points-virgules). Je trouve cela facile à lire et clair et je n'ai jamais de problèmes de portée sur les déclarations «si». Par conséquent, l'utilisation de crochets sur une seule instruction de condition if nécessiterait 3 lignes. Comme ça:
L'utilisation d'une instruction if sur une ligne est préférable car elle utilise moins d'espace vertical et le code est plus compact.
Je ne forcerais pas les autres à utiliser cette méthode, mais cela fonctionne pour moi et je ne pourrais pas être plus en désaccord avec les exemples fournis sur la façon dont le fait de laisser de côté les crochets conduit à des erreurs de codage / de portée.
la source
/*eslint curly: ["error", "multi"]*/
Techniquement non mais sinon absolument oui !!!
Oubliez "C'est une préférence personnelle", "le code fonctionnera très bien", "il a bien fonctionné pour moi", "c'est plus lisible" yada yada BS. Cela pourrait facilement conduire à des problèmes très graves si vous faites une erreur et croyez-moi, il est très facile de faire une erreur lorsque vous codez (ne croyez pas?, Consultez le célèbre bug Apple go to fail ).
Argument: "C'est une préférence personnelle"
Non, ce n'est pas le cas. À moins que vous ne soyez une équipe d'un seul homme partant sur Mars, non. La plupart du temps, d'autres personnes liront / modifieront votre code. Dans toute équipe de codage sérieuse, ce sera la méthode recommandée, donc ce n'est pas une «préférence personnelle».
Argument: "le code fonctionnera très bien"
Il en va de même pour le code spaghetti! Cela signifie-t-il que vous pouvez le créer?
Argument: "cela a bien fonctionné pour moi"
Dans ma carrière, j'ai vu tellement de bugs créés à cause de ce problème. Vous ne vous souvenez probablement pas combien de fois vous avez commenté
'DoSomething()'
et déconcerté par la raison de l''SomethingElse()'
appel:Ou ajouté 'SomethingMore' et n'a pas remarqué qu'il ne sera pas appelé (même si l'indentation implique le contraire):
Voici un exemple concret que j'ai eu. Quelqu'un a voulu désactiver toute la journalisation afin de lancer find & replace
"console.log"
=>//"console.log"
:Vous voyez le problème?
Même si vous pensez, "ce sont si insignifiants, je ne ferais jamais cela"; rappelez-vous qu'il y aura toujours un membre de l'équipe avec des compétences en programmation inférieures à vous (j'espère que vous n'êtes pas le pire de l'équipe!)
Argument: "c'est plus lisible"
Si j'ai appris quelque chose sur la programmation, c'est que les choses simples deviennent très vite très complexes. Il est très courant que ceci:
se transforme en ce qui suit après avoir été testé avec différents navigateurs / environnements / cas d'utilisation ou de nouvelles fonctionnalités sont ajoutées:
Et comparez-le avec ceci:
PS: les points bonus vont à celui qui a remarqué le bogue dans l'exemple ci-dessus.
la source
Il n'y a aucun problème de maintenabilité!
Le problème avec vous tous est que vous mettez des points-virgules partout. Vous n'avez pas besoin d'accolades pour plusieurs instructions. Si vous souhaitez ajouter une instruction, utilisez simplement des virgules.
Ceci est un code valide qui fonctionnera comme prévu!
la source
if
,else
etalert
et nonIf
,Else
etAlert
?if
et(
, commeif(true) doSomething();
Il n'y a aucune raison de programmation d'utiliser les accolades sur les instructions d'une ligne.
Cela ne dépend que des préférences et de la lisibilité des codeurs.
Votre code ne cassera pas à cause de cela.
la source
En plus de la raison mentionnée par @Josh K (qui s'applique également à Java, C etc.), un problème particulier en JavaScript est l'insertion automatique de points-virgules . De l'exemple de Wikipédia:
Donc, cela peut également donner des résultats inattendus, s'il est utilisé comme ceci:
Ce n'est pas vraiment mieux d'écrire
mais peut-être qu'ici l'erreur est un peu plus facile à détecter (?)
la source
C'est une question de style, mais les accolades bouclées sont bonnes pour éviter d'éventuelles suspensions .
la source
Il y a beaucoup de bonnes réponses, donc je ne vais pas répéter, sauf pour dire ma «règle» quand les accolades peuvent être omises: à des conditions qui «retournent» ou «jettent» (par exemple) comme seule déclaration . Dans ce cas, le contrôle de flux est déjà clair qu'il se termine:
Même le «mauvais cas» peut être rapidement identifié (et corrigé) grâce au contrôle de flux de terminaison. Cette «règle» concept / structure s'applique également à un certain nombre de langues.
Bien sûr, c'est aussi pourquoi on peut utiliser un linter.
la source
Voici pourquoi il est recommandé
Disons que j'écris
Puis le développeur suivant arrive et dit "Oh, je dois faire autre chose", alors ils écrivent
Maintenant, comme vous pouvez le voir, "AlsoTrue" sera toujours vrai, car le premier développeur n'a pas utilisé d'accolades.
la source
Je travaille actuellement sur un minifier. Même maintenant, je le vérifie sur deux énormes scripts. Expérimentalement, j'ai découvert: vous pouvez supprimer les accolades derrière pour, if, else, while, function * si les accolades n'incluent pas ';', 'return', 'for', 'if', 'else', 'while', 'do', 'function'. Sauts de ligne indépendants.
Bien sûr, vous devez remplacer l'accolade fermante par un point-virgule si elle n'est pas suivie par une autre accolade fermante.
Une fonction ne doit pas se terminer par une virgule.
Testé sur Chrome et FF.
la source
J'ai toujours trouvé ça
est plus facile pour mes yeux que
également conditionnel tel que
sont plus faciles à lire (mon opinion personnelle) plutôt que
mais je suppose que cela se résume au style de codage
la source
Ne répond pas directement à la question, mais vous trouverez ci-dessous une courte syntaxe sur la condition if sur une ligne
Ex:
Peut être écrit comme ceci:
la source
Il existe de nombreux problèmes avec javascript. Jetez un œil à l' architecte JavaScript Douglas Crockford qui en parle. L' instruction if semble convenir mais l' instruction return peut poser un problème.
la source
J'ai trouvé cette réponse en recherchant une expérience similaire, alors j'ai décidé d'y répondre avec mon expérience.
Les instructions sans parenthèse fonctionnent dans la plupart des navigateurs, cependant, j'ai testé que les méthodes sans parenthèses ne fonctionnent pas dans certains navigateurs.
Depuis le 26 février 2018, cette déclaration fonctionne dans Pale Moon, mais pas dans Google Chrome.
la source
Le niveau d'indentation de début d'une instruction doit être égal au nombre d'accolades ouvertes au-dessus. (à l'exclusion des accolades entre guillemets ou commentés ou dans les directives du préprocesseur)
Sinon, K&R serait un bon style d'indentation. Pour corriger leur style, je recommande de placer de courtes instructions if simples sur une seule ligne.
au lieu de
Si j'écrivais un éditeur, je ferais en sorte que son bouton de formatage automatique suce la barre jusqu'à la même ligne que foo, et je le ferais insérer des accolades autour de la barre si vous appuyez sur Entrée avant comme ceci:
Ensuite, il est facile et cohérent d'ajouter de nouvelles instructions au-dessus ou en dessous de la barre dans le corps de l'instruction if
la source
Parfois, ils semblent nécessaires! Je ne pouvais pas le croire moi-même, mais hier, il m'est venu à l'esprit lors d'une session Firebug (récente Firefox 22.0) que
exécuté faire quelque chose malgré my.condition.key était vrai . Ajout d'accolades:
fixé cette question. Il existe des myriards d'exemples où cela fonctionne apparemment sans les accolades, mais dans ce cas, ce n'est certainement pas le cas.
Les personnes qui ont tendance à mettre plus d'une déclaration sur une ligne devraient très certainement toujours utiliser des accolades, bien sûr, car des choses comme
sont difficiles à trouver.
la source
Je voudrais juste noter que vous pouvez également laisser les accolades hors de l'autre. Comme vu dans cet article de John Resig's .
la source
else
pour correspondre à l'utilisation d'accolades - cet exemple nécessiterait les accolades sur leelse
bloc afin de passer une révision de code. [1]: wiki.qt.io/Qt_Coding_Style#BracesIl existe un moyen d'obtenir plusieurs lignes non accolades si des instructions. (Wow what anglais ..) mais c'est un peu tedius:
la source
if (true) funcName()
etelse return null