Pourquoi tout le monde me dit-il qu'écrire du code comme celui-ci est une mauvaise pratique?
if (foo)
Bar();
//or
for(int i = 0 i < count; i++)
Bar(i);
Mon plus grand argument pour omettre les accolades est qu'il peut parfois y avoir deux fois plus de lignes avec eux. Par exemple, voici du code pour peindre un effet d'éclat pour une étiquette 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 supplémentaire de chaîner usings
ensemble sans avoir à indenter 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 courant pour les accolades tourne autour de la programmation de la maintenance et des problèmes qui en découleraient en insérant du code entre l'instruction if d'origine et son résultat attendu:
if (foo)
Bar();
Biz();
Des questions:
- Est-il faux de vouloir utiliser la syntaxe plus compacte qu'offre le langage? Les gens qui conçoivent ces langages sont intelligents, je ne peux pas imaginer qu'ils mettraient une fonctionnalité toujours mauvaise à utiliser.
- Devrions-nous ou ne devrions-nous pas écrire du code afin que le plus petit dénominateur commun puisse le comprendre et n'ait aucun problème à l'utiliser?
- Y a-t-il un autre argument qui me manque?