Por que todo mundo me diz que escrever um código como esse é uma prática ruim?
if (foo)
Bar();
//or
for(int i = 0 i < count; i++)
Bar(i);
Meu maior argumento para omitir as chaves é que às vezes pode haver o dobro de linhas com elas. Por exemplo, aqui está um código para pintar um efeito de brilho para um rótulo em 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));
Você também pode obter o benefício adicional de encadear usings
sem precisar recuar um milhão de vezes.
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
}
O argumento mais comum para chavetas gira em torno da programação de manutenção e os problemas que surgiriam com a inserção de código entre a instrução if original e o resultado pretendido:
if (foo)
Bar();
Biz();
Questões:
- É errado querer usar a sintaxe mais compacta que o idioma oferece? As pessoas que projetam essas linguagens são inteligentes, não consigo imaginar que colocariam um recurso que é sempre ruim de usar.
- Devemos ou não devemos escrever código para que o menor denominador comum possa entender e não ter problemas ao trabalhar com ele?
- Existe outro argumento que estou perdendo?