¿Por qué todos me dicen que escribir código como este es una mala práctica?
if (foo)
Bar();
//or
for(int i = 0 i < count; i++)
Bar(i);
Mi mayor argumento para omitir las llaves es que a veces puede ser el doble de líneas con ellas. Por ejemplo, aquí hay un código para pintar un efecto de brillo para una etiqueta 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));
También puede obtener el beneficio adicional de encadenar usings
juntos sin tener que sangrar un millón de veces.
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
}
El argumento más común para las llaves se basa en la programación de mantenimiento y los problemas que se producirían al insertar código entre la declaración if original y el resultado deseado:
if (foo)
Bar();
Biz();
Preguntas:
- ¿Está mal querer usar la sintaxis más compacta que ofrece el lenguaje? Las personas que diseñan estos idiomas son inteligentes, no puedo imaginar que pondrían una función que siempre es mala de usar.
- ¿Deberíamos o no deberíamos escribir código para que el mínimo común denominador pueda entender y no tener problemas para trabajar con él?
- ¿Hay otro argumento que me estoy perdiendo?