Dlaczego wszyscy mówią mi, że pisanie takiego kodu jest złą praktyką?
if (foo)
Bar();
//or
for(int i = 0 i < count; i++)
Bar(i);
Moim największym argumentem za pominięciem nawiasów klamrowych jest to, że czasami może zawierać dwa razy więcej wierszy. Na przykład, oto kod do malowania efektu blasku dla etykiety w 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));
Możesz także uzyskać dodatkową korzyść z łączenia w łańcuch usings
bez konieczności wciskania milion razy.
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
}
Najczęstszy argument za nawiasami klamrowymi dotyczy programowania konserwacyjnego i problemów, które wynikną z wstawienia kodu między oryginalną instrukcję if a jej zamierzonym wynikiem:
if (foo)
Bar();
Biz();
Pytania:
- Czy źle jest chcieć używać bardziej zwartej składni, jaką oferuje język? Ludzie, którzy projektują te języki, są sprytni, nie wyobrażam sobie, żeby umieścili funkcję, która zawsze jest niewłaściwa.
- Powinniśmy czy nie powinniśmy napisać kod tak, aby najniższy wspólny mianownik mógł go zrozumieć i nie miał z nim problemów?
- Czy jest inny argument, którego mi brakuje?