J'ai vu du code comme celui-ci:
if(statement)
do this;
else
do this;
Cependant, je pense que c'est plus lisible:
if(statement){
do this;
}else{
do this;
}
Puisque les deux méthodes fonctionnent, est-ce simplement une question de préférence à utiliser ou est-ce qu'une méthode serait recommandée par rapport à l'autre?
if-statement
coding-style
curly-braces
jerebear
la source
la source
Réponses:
Le problème avec la première version est que si vous revenez en arrière et ajoutez une deuxième instruction aux clauses if ou else sans vous rappeler d'ajouter les accolades, votre code se cassera de manière inattendue et amusante.
En termes de maintenabilité, il est toujours plus intelligent d'utiliser le deuxième formulaire.
EDIT: Ned le souligne dans les commentaires, mais cela vaut la peine d'être lié ici aussi, je pense. Ce ne sont pas seulement des conneries hypothétiques de la tour d'ivoire: https://www.imperialviolet.org/2014/02/22/applebug.html
la source
if (…) { goto L; goto L; }
mais avait oublié les accolades. C'est purement par hasard que `` si (…) {goto L; goto L; } `n'est pas un bogue de sécurité, car c'est toujours un bogue (mais pas un bogue avec des conséquences sur la sécurité). Sur un autre exemple, les choses pourraient aller dans la direction opposée et le code sans bretelles pourrait être accidentellement sûr. Sur un troisième exemple, le code sans accolades serait initialement sans bogue et le développeur introduirait une faute de frappe lors de l'ajout des accolades.Un problème avec l'omission de blocs d'instructions est l'ambiguïté else. C'est-à-dire que les langages inspirés du C ignorent l'indentation et n'ont donc aucun moyen de séparer ceci:
De ceci:
la source
else
se lie avidement au plus proche, au plus profondif
. Le problème survient lorsque le C ou des langages similaires sont codés par des personnes qui ne le savent pas, n'y pensent pas ou n'ont pas encore assez de café - alors ils écrivent du code qui, selon eux, fera une chose, mais le La spécification du langage indique que l'analyseur doit faire autre chose, ce qui peut être très différent. Et oui, c'est un autre argument solide en faveur de toujours inclure les accolades même si la grammaire les signale comme théoriquement «inutiles».Mon schéma général est que s'il tient sur une seule ligne, je ferai:
S'il y a une clause else, ou si le code sur lequel je veux exécuter
true
est de longueur significative, accolades complètement:En fin de compte, cela revient à une question subjective de style et de lisibilité. Le monde de la programmation générale, cependant, se divise à peu près en deux parties (pour les langages qui utilisent des accolades): soit les utiliser tout le temps sans exception, soit les utiliser tout le temps avec exception. Je fais partie de ce dernier groupe.
la source
if(true){ do_something(); }
, pourquoi prendre la chance de demander à un autre programmeur d'introduire un bogue sérieux sur la route (chercher le code ssl total "goto fail" d'Apple).J'utilise le formateur de code de l'IDE que j'utilise. Cela peut différer, mais cela peut être configuré dans les Préférences / Options.
J'aime celui la:
la source
La "règle" que je suis est la suivante:
Si l'instruction "if" teste pour faire quelque chose (fonctions d'appel IE, configuration de variables, etc.), utilisez des accolades.
En effet, j'estime que vous devez préciser quelles fonctions sont appelées et où va le flux du programme, dans quelles conditions. Il est important que le programmeur comprenne exactement quelles fonctions sont appelées et quelles variables sont définies dans cette condition pour les aider à comprendre exactement ce que fait votre programme.
Si l'instruction "if" teste pour arrêter de faire quelque chose (contrôle de flux IE dans une boucle ou une fonction), utilisez une seule ligne.
Dans ce cas, ce qui est important pour le programmeur est de découvrir rapidement quels sont les cas exceptionnels où vous ne voulez pas que le code s'exécute, et tout cela est couvert dans $ test, pas dans le bloc d'exécution.
la source
Avoir les accolades dès le premier instant devrait vous éviter d'avoir à déboguer ceci:
la source
;
:)Utilisez des accolades pour toutes les instructions if, même les plus simples. Ou, réécrivez une instruction if simple pour utiliser l'opérateur ternaire:
Cela ressemble beaucoup plus à ceci:
Mais n'utilisez l'opérateur ternaire que si vous êtes absolument sûr qu'il n'y a rien d'autre à faire dans les blocs if / else!
la source
Je préfère utiliser des accolades. L'ajout d'accolades facilite la lecture et la modification.
Voici quelques liens pour l'utilisation des accolades:
Préférez Multiline si
Omettre les accolades: pas seulement une question de style
Dépassement de pile
la source
D'après mon expérience, le seul (très) léger avantage de la première forme est la lisibilité du code, la seconde forme ajoute du «bruit».
Mais avec les IDE modernes et la génération automatique de code (ou l'auto-complétion), je recommande fortement d'utiliser le deuxième formulaire, vous ne passerez pas plus de temps à taper des accolades et vous éviterez certains des bogues les plus fréquents.
Il y a suffisamment de bogues énergivores, les gens ne devraient tout simplement pas ouvrir les portes pour de grandes pertes de temps.
L'une des règles les plus importantes à retenir lors de l'écriture de code est la cohérence. Chaque ligne de code doit être écrite de la même manière, peu importe qui l'a écrite. Être rigoureux empêche les bugs de "se produire";)
Il en va de même pour nommer clairement et explicitement vos variables, méthodes, fichiers ou en les indentant correctement ...
Lorsque mes élèves acceptent ce fait, ils arrêtent de se battre contre leur propre code source et commencent à voir le codage comme une activité vraiment intéressante, stimulante et créative. Ils défient leur esprit, pas leurs nerfs!
la source
C'est une question de préférence. J'utilise personnellement les deux styles, si je suis raisonnablement sûr que je n'aurai plus besoin d'ajouter d'autres déclarations, j'utilise le premier style, mais si c'est possible, j'utilise le second. Puisque vous ne pouvez plus ajouter de déclarations au premier style, j'ai entendu certaines personnes recommander de ne pas l'utiliser. Cependant, la deuxième méthode implique une ligne de code supplémentaire et si vous (ou votre projet) utilisez ce type de style de codage, la première méthode est très préférée pour les instructions if simples:
Cependant, je pense que la meilleure solution à ce problème est en Python. Avec la structure de bloc basée sur des espaces, vous n'avez pas deux méthodes différentes pour créer une instruction if: vous n'en avez qu'une:
Bien que cela ait le "problème" que vous ne pouvez pas du tout utiliser les accolades, vous avez l'avantage qu'il n'y a plus de lignes que le premier style et qu'il a le pouvoir d'ajouter plus d'instructions.
la source
J'ai toujours essayé de rendre mon code standard et de ressembler le plus possible au même. Cela permet aux autres de le lire plus facilement lorsqu'ils sont chargés de le mettre à jour. Si vous faites votre premier exemple et ajoutez une ligne au milieu, cela échouera.
Ne fonctionnera pas:
si (déclaration) faites ceci; et ça; sinon faites ceci;
la source
Personnellement, j'utilise le premier style uniquement pour lancer une exception ou renvoyer prématurément une méthode. Comme argument Vérifier au début d'une fonction, car dans ces cas, j'ai rarement plus d'une chose à faire, et il n'y en a jamais d'autre.
Exemple:
Sinon j'utilise le second style.
la source
Ma préférence personnelle utilise un mélange d'espaces et de crochets comme celui-ci:
Je pense que cela a l'air propre et rend mon code très facile à lire et, plus important encore, à déboguer.
la source
Je suis d'accord avec la plupart des réponses sur le fait qu'il vaut mieux être explicite dans votre code et utiliser des accolades. Personnellement, j'adopterais un ensemble de normes de codage et je m'assurerais que tous les membres de l'équipe les connaissent et s'y conforment. Là où je travaille, nous utilisons les normes de codage publiées par IDesign.net pour les projets .NET.
la source
Je préfère mettre une attelle frisée. Mais parfois, l'opérateur ternaire aide.
Au lieu de :
Il faut simplement faire:
int x = condition ? 30 : 20;
Imaginez aussi un cas:
Ce serait beaucoup mieux si vous mettez l'orthèse bouclée.
la source