Est-ce une mauvaise pratique d'utiliser un if sans accolades?
J'ai vu un code comme ceci:
if(statement)
do this;
else
do this;
Je n'aime pas ça, je pense que c'est plus propre et plus lisible
if(statement){
do this;
}else{
do this;
}
Est-ce simplement une question de préférence ou ce serait une façon d'être conseillé sur l'autre?
- double possible de Pourquoi est-il considéré comme une mauvaise pratique pour omettre les accolades?
- À mon avis, c'est mauvais, parce que vous commencer s'appuyant sur les espaces d'indentation qui n'est presque jamais pleinement compatible. Il déraille, le lecteur train de la pensée, quand ils ont à vous soucier de ces choses.
Vous devez vous connecter pour publier un commentaire.
Le problème avec la première version, c'est que si vous revenez en arrière et ajouter une deuxième déclaration de l'if ou else clauses, sans se souvenir d'ajouter des accolades, votre code sera briser dans l'inattendu et amusant les moyens.
Maintenabilité-sage, c'est toujours plus intelligent d'utiliser la deuxième forme.
EDIT: Nie de points dans les commentaires, mais il vaut la peine de lier ici, aussi, je pense. Ceci n'est pas une tour d'ivoire hypothétique des conneries: https://www.imperialviolet.org/2014/02/22/applebug.html
begin
/end
au lieu d'accolades et vous pouvez exécuter dans exactement les mêmes problèmes. Je suppose que tu veux réellement dire les langues dans lesquelles vous devez fermer explicitement si les déclarations avec quelque chose comme unend if
.if (…) { goto L; goto L; }
mais il a oublié les accolades. C'est une pure coïncidence que `si (...) { goto L; goto L; }` n'est pas un bug de sécurité, parce que c'est encore un bug (tout simplement pas l'un avec des conséquences sur la sécurité). Sur un autre exemple, les choses pourraient aller dans la direction opposée et le braceless code pourrait être accidentellement coffre-fort. Sur un troisième exemple, le braceless code sans bug d'abord et le développeur devra introduire une faute de frappe, tout en ajoutant des accolades.if
déclaration, et si elle ne l'est pas, alors vous devriez être en train de travailler sur ce.if-else
est un état unique, pas de plusieurs états.Un problème avec le laissant sortir des blocs d'instruction est l'autre-de l'ambiguïté. Qui est C-inspiré langues ignorer la mise en retrait et n'ont donc pas de moyen de distinguer:
De:
else
se lie avec gourmandise pour le plus proche, le plus profondif
. Le problème se pose lorsque C ou similaire langues sont codées par des gens qui ne savent pas cela, n'y pensez pas, ou n'ont pas assez de café - donc ils écrivent du code qu'ils pensent va faire une chose, mais le langage de spécification dit l'analyseur a faire quelque chose d'autre, qui peut être très différente. Et oui, c'est un solide argument en faveur de toujours, y compris des accolades, même si la grammaire drapeaux comme théoriquement "inutiles".Mon schéma général est que si elle tient sur une seule ligne, je vais le faire:
Si il y a une clause else, ou si le code que je veux exécuter sur
true
est d'une longueur considérable, croisillons tout le chemin:En fin de compte, il s'agit d'une question subjective de style et de lisibilité. La programmation générale du monde, cependant, la grande majorité se divise en deux parties (pour les langues qui utilisent des accolades): soit les utiliser tout le temps, sans exception, ou de les utiliser tout le temps, sauf exception. Je suis partie de ce dernier groupe.
if(true){ do_something(); }
, pourquoi prendre une chance sur un autre programmeur introduire un bug grave en bas de la route (recherche d'Apple "goto fail" total ssl code screwup).Je suis en utilisant le formateur de code de l'IDE que j'utilise. Qui peut-être différent, mais il peut être configuré dans les Préférences/Options.
J'aime celui-ci:
Avoir les accolades dès le premier moment devrait vous aider à vous empêcher de jamais avoir de débogage:
;
🙂La "règle" que j'ai suivi est: est-ce
Si l'instruction "if" est mise à l'essai dans le but de faire quelque chose (I. E. les fonctions d'appel, configurer des variables, etc.), utiliser des accolades.
C'est parce que je pense que vous avez besoin de faire savoir clairement quelles sont les fonctions sont appelés et où le flux du programme est en cours, sous quelles conditions. Avoir le programmeur de comprendre exactement ce que l'on appelle les fonctions et les variables sont définies dans cet état est important pour les aider à comprendre exactement ce que votre programme est en train de faire.
Si l'instruction "if" est mise à l'essai afin de cesser de faire quelque chose (I. E. le contrôle de flux à l'intérieur d'une boucle ou d'une fonction), utiliser une seule ligne.
Dans ce cas, ce qui est important pour le programmeur est en train de découvrir rapidement ce que les cas exceptionnels sont là où vous ne voulez pas le code à exécuter, et c'est tout coverred dans $test, pas dans l'exécution du bloc.
Utiliser des accolades pour tous si les états, même les plus simples. Ou, réécriture d'une simple instruction si l'utilisation de l'opérateur ternaire:
A l'air beaucoup plus sympa comme ça:
Mais seulement d'utiliser l'opérateur ternaire si vous êtes absolument sûr il n'y a rien d'autre qui doit aller dans le if/else blocs!
Je préfère utiliser des accolades. En ajoutant des accolades rend plus facile à lire et à modifier.
Voici quelques liens pour l'utilisation de croisillons:
Préférez Multiligne si
Omettre Les Accolades: Pas Seulement Une Question De Style
Un Débordement De Pile
C'est une question de préférence. Personnellement, j'utilise les deux styles, si je suis raisonnablement sûr que je n'aurez pas besoin d'ajouter plus de déclarations, j'utilise le premier style, mais si c'est possible, j'utilise la deuxième. Puisque vous ne pouvez pas ajouter plus de déclarations à la première de style, j'ai entendu dire que certaines personnes vous déconseillons de l'utiliser. Cependant, la seconde méthode ne encourir une ligne de code supplémentaire et si vous (ou votre projet) utilise ce type de style de codage, la première méthode est très largement préféré pour de simples si les déclarations:
Cependant, je pense que la meilleure solution à ce problème est en Python. Avec le blanc, à base de bloc de la structure, vous n'avez pas deux différentes méthodes de création d'une instruction if: vous n'avez qu'un:
Tout en qui ne le "problème" que vous ne pouvez pas utiliser les accolades, vous faire gagner l'avantage qu'il n'est plus de lignes que le premier style et il a le pouvoir d'ajouter des instructions.
J'ai toujours essayé de faire de mon code standard et de regarder aussi à peu près le même que possible. Cela rend plus facile pour les autres de le lire quand ils sont en charge de le mettre à jour. Si vous faites votre premier exemple et ajouter une ligne dans le milieu, il va échouer.
Ne fonctionne pas:
si(déclaration)
ce faire;
et ce;
d'autre
ce faire;
Personnellement, j'utilise le premier style que jeter une exception ou de retour à partir d'une méthode prématurément. Comme argument de Vérifier au début de la fonction, parce que dans ces cas, rarement dois-je avoir plus d'une chose à faire, et il n'est jamais une autre personne.
Exemple:
Sinon j'utilise la deuxième de style.
À partir de mon expérience, la seule (très) léger avantage de la première forme est la lisibilité du code, la deuxième forme ajoute "bruit".
Mais les Ide modernes et code autogeneration (ou d'auto-complétion) je recommande fortement d'utiliser la deuxième forme, vous n'aurez pas à passer plus de temps à taper des accolades et vous éviterez la plupart des bugs.
Il y a suffisamment de consommation d'énergie des bugs, des gens juste shoudn pas ouvrir les portes pour les grandes pertes de temps.
L'un de la règle la plus importante à retenir lors de l'écriture de code est la cohérence. Chaque ligne de code doit être écrit de la même façon, peu importe qui l'a écrit. Être rigoureux empêche les bugs de la "passe" 😉
C'est la même chose avec les nommant clairement & explicitement des variables, des méthodes, des fichiers ou correctement mise en retrait d'eux...
Quand mes élèves accepter ce fait, ils arrêter de se battre contre leur propre code source, et ils commencent à voir que les codes de vraiment intéressant, stimulant et de l'activité créatrice. Ils remettent en question leur esprit, et non pas leurs nerfs !
Ma préférence personnelle est à l'aide d'un mélange d'espaces et les parenthèses comme ceci:
Je pense que cela a l'air propre et rend mon code très facile à lire et le plus important - de débogage.
Je suis d'accord avec la plupart des réponses dans le fait qu'il est préférable d'être explicite dans votre code et utiliser des accolades. Personnellement, je voudrais adopter un ensemble de normes de codage et de s'assurer que tout le monde sur l'équipe connaît et respecte. Où je travaille, nous utilisons les normes de codage publié par IDesign.net pour .Projets NET.
Je préfère mettre une accolade. Mais parfois, l'opérateur ternaire aide.
Au lieu de :
On devrait tout simplement faire :
int x = condition ? 30 : 20;
Aussi imaginer un cas :
Il serait beaucoup mieux si vous mettez de l'accolade dans.