Pourquoi est-il considéré comme une mauvaise pratique pour omettre les accolades?

Pourquoi tout le monde me dire de l'écriture de code, comme c'est une mauvaise pratique?

if (foo)
    Bar();

//or

for(int i = 0 i < count; i++)
    Bar(i);

Mon plus gros argument pour omettre les accolades, c'est qu'il peut parfois être deux fois autant de lignes avec eux. Pour exemple, voici un code pour peindre un effet de lueur d'un label en C#.

using (Brush br = new SolidBrush(Color.FromArgb(15, GlowColor)))
{
    for (int x = 0; x <= GlowAmount; x++)
    {
        for (int y = 0; y <= GlowAmount; y++)
        {
            g.DrawString(Text, this.Font, br, new Point(IconOffset + x, y));
        }
     }
 }
 //versus
using (Brush br = new SolidBrush(Color.FromArgb(15, GlowColor)))
    for (int x = 0; x <= GlowAmount; x++)
        for (int y = 0; y <= GlowAmount; y++)
            g.DrawString(Text, this.Font, br, new Point(IconOffset + x, y));

Vous pouvez également obtenir l'avantage de chaînage usings ensemble sans avoir à tiret d'un million de fois.

using (Graphics g = Graphics.FromImage(bmp))
{
    using (Brush brush = new SolidBrush(backgroundColor))
    {
        using (Pen pen = new Pen(Color.FromArgb(penColor)))
        {
            //do lots of work
        }
    }
 }
//versus
using (Graphics g = Graphics.FromImage(bmp))
using (Brush brush = new SolidBrush(backgroundColor))
using (Pen pen = new Pen(Color.FromArgb(penColor)))
{
    //do lots of work
}

L'argument le plus commun pour des accolades tourne autour de maintenance de la programmation, et les problèmes qui en découleraient par l'insertion de code entre l'original en cas de déclaration et de son résultat:

if (foo)
    Bar();
    Biz();

Questions:

  1. Est-il de mal à vouloir utiliser la syntaxe compacte dont la langue n'offre? Les personnes qui conçoivent ces langues sont intelligents, je ne peux pas imaginer qu'ils allaient mettre une caractéristique qui est toujours mauvais d'utilisation.
  2. Doit-on ou ne devrait-on pas écrire de code de sorte que le plus petit dénominateur commun peut comprendre et n'ont aucun problème à travailler avec elle?
  3. Est là un autre argument que je suis absent?
  • Cela vient à travers plus comme un coup de gueule qu'une question. C'est comme vous dites, "je sais pourquoi c'est mauvais mais je n'ai pas de soins."
  • J'ai donné ce que je pense est l'argument le plus commun contre mon cas. Je fais une demande pour d'autres raisons pourquoi j'ai peut-être tort.
  • Argumentatif? Pourriez-vous la reformuler? La réponse que vous avez donné et la réponse la dessus personne a donné sont "la réponse", de sorte que votre question est vraiment de l'auto-répondeur.
  • Ils ne sont pas "la solution". Je suis à la recherche d'autres réponses, car je pense que le plus commun est le mal. Par exemple, Torlack a donné un exemple C++ à propos des macros.
  • Je suis d'accord avec vous. Les omettre. Période.
  • L'utilisation de Python et d'oublier à ce sujet 🙂
  • ...ou de l'utilisation VB.NET et oubliez aussi ;-P
  • QUI SE SOUCIE DE LA FAÇON DONT DE NOMBREUSES LIGNES DE QUELQUE CHOSE EST À L'EST EN 2010. Les moniteurs sont à l'échelle et à bas prix et de haute résolution! Mon moniteur est de 2048 X 1152 et j'ai DEUX d'entre eux! La lisibilité est bien plus important qu'une économie de 2 lignes verticales quand vous pouvez facilement introduire subtiles erreurs qui sont difficiles à trouver.
  • J'utilise des accolades pour les conditions. Je n'ai jamais utilisé (c'est pourquoi c'est un commentaire et pas de réponse), mais trouvé très intéressant le pas-accolade pour "l'aide" de l'énoncé, je pense qu'il clarifie la lecture.
  • Les moniteurs sont à l'échelle et à bas prix, mais ils ne sont pas de haut et de bas prix. L'espace Vertical est de plus en plus rares qu'à l'horizontale de l'espace.
  • Tourner de côté 🙂
  • Afin de ne pas bousiller comme Apple avec le SSL bug découvert en Février 2014, LOL.
  • L'empilement de l'usage sans accolades ne compilera pas si vous ajoutez une instruction entre eux, tout en omettant des accolades sur les conditions de compiler, même si vous ajoutez/supprimez une déclaration directement à la suite de la if déclaration. Dans un cas, l'omission d'accolades ne peut pas provoquer une erreur d'exécution, dans l'autre, d'une omission peut facilement provoquer une erreur d'exécution.
  • Si vous avez été sérieux au sujet de la réduction des lignes de code, vous pouvez utiliser cette construction: foo && bar(); au lieu d'une seule ligne si-états, foo ? doSomething() : doSomethingElse() au lieu d'une seule ligne si-sinon-déclarations, etc. Hélas, la plupart des gens ne sont pas vraiment sérieux au sujet de la réduction des lignes de code. 🙂
  • Oups, raté le C# tag.
  • Si votre plus grand argument est le nombre de lignes est quelque chose de mal avec votre façon de penser sur le code 🙂
  • Extra accolades sont pour les personnes avec un mauvais indentation: elles se perdent et habituellement ne sais pas qui -par exemple - tout "autre" appartient à la plus proche de "si".
  • Re: "QUI se SOUCIE de la FAÇON dont de NOMBREUSES LIGNES de quelque CHOSE EST à l'EST", code Consolidé le rend beaucoup plus facile à lire lorsque le débogage javascript dans les navigateurs lors de l'affichage du site. Et si c'est de l'argument, pourquoi utiliser des fonctions d'assistance à tous?
  • En réduisant le nombre de lignes n'est pas question de réduire le nombre de lignes. C'est à propos de la lisibilité du code. C'est aussi la réponse à pourquoi écrire foo && bar(); est généralement mauvais.
  • exactement.
  • C'est seulement considéré comme mauvais par des personnes qui ont besoin d'apprendre comment analyser le code mieux. Et comme quelqu'un l'a déjà mentionné, si elles ont un problème sans {} alors, qu'en est ternaire opérateurs? L'exemple n'est même pas imbriquée! @martinkunev Que l'école de la pensée et de l'similaires est donc très limitée. Trop binaire. Oui, oui, boolean tend pour 1 ou 0, mais c'est le résultat de l'exploitation. Le seul problème avec du code comme ça, c'est ... ça dépend de trop de variables. Mais je connais des gens aussi froncer les sourcils à l'encontre d'un code comme: if ((s=socket(...))<0) mais je n'ai jamais eu un problème lors de la lecture d'un tel code. Style débats sont à aboyer.

  1. Écriture de l'ouverture du support sur la même ligne que déclaration précédente:

    if ( any ) {
        DoSomething();
    }

  2. Si vous pensez que c'est trop gros, vous
    pouvez l'écrire en une seule ligne:

    if ( any ) { DoSomething(); }

    Si vous pensez que, dans une ligne n'est pas lisible si bon, vous pouvez l'écrire en deux lignes:

    if ( any ) {
        DoSomething(); }
    if ( any )
        { DoSomething(); }
    • À l'avenir quelqu'un a besoin de changement
      une déclaration de plus de déclarations.
      Sans crochets est la variation de la plus
      compliqué. Oui seulement littlebit, mais
      vaut mieux éviter les bugs. Et de l'écriture
      entre parenthèses est très facile, un moyen pas cher.
    • Crochets de clôture devrait toujours être au niveau du bloc, jamais de fuite à la fin de la dernière ligne.
    • C'est même pire que de ne pas l'aide de crochets.