为什么省略大括号被认为是不好的做法?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (5)
  • 关注 (0)
  • 查看 (141)

为什么每个人都告诉我写这样的代码是不好的做法?

if (foo)
    Bar();

//or

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

我忽略大括号的最大理由是它有时可能是它们的两倍。例如,下面是一些在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));

还可以获得链接usings在一起的额外好处,无需缩进一百万次。

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
}

大括号最常用的参数是围绕着维护编程,以及在原始if语句和预期结果之间插入代码所带来的问题:

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

问题:

  1. 想要使用语言提供的更紧凑的语法是错误的吗?
  2. 我们是否应该或不应该这样编写代码?
  3. 还有另外一个说法吗?
提问于
用户回答回答于

和其他人一样,就是好看

if (condition) action();  // ok by me

if (condition) // normal/standard for me
{
   action();
}
用户回答回答于

主要原因是,当你有大量的代码时,它确实能使代码更易读懂,并且当你有一个一致的样式时,你可以更快地解析代码。

除了向if添加第二条语句之外,经常使用大括号的另一个很好的原因是这样的情况可能发生:

if(a)
   if(b)
     c();
else
   d();

你有否留意到,“if(B)”的另一项条文其实是“if(B)”?你可能知道,但你会相信任何人都熟悉这件事吗?

总是大括号,因为它使源代码更易读,更快地被你的大脑解析。只有在最简单的if语句中,比如如果进行了委托或切换式语句,你知道子句将永远不会被扩展,我将省略括号。

用户回答回答于

如果代码少的话,可以这样写:

if(foo()) bar();

如果足够长,可以分成两行,使用大括号。

用户回答回答于

阅读的速度..。

除了已经提到的。此时,我已经习惯于解析带大括号和空格的if语句。所以我读到:

if (condition)
{
    DoSomething();
}

DoSomethingElse();

比我读的稍快:

if (condition) DoSomething();

DoSomethingElse();

如果它看起来是这样的话,我读起来会慢一点:

if (condition) DoSomething();
DoSomethingElse();

我读到的比以前的要慢得多:

if (condition) 
    DoSomething();
DoSomethingElse();

因为我情不自禁地再读一遍:

if (condition)
{
    DoSomething();
    DoSomethingElse();
}
用户回答回答于

实际上,唯一真正有点节约时间,是当我调试时,注释掉bar():

if(foo)
  // bar();
doSomethingElse();

除此之外,我倾向于使用:

if(foo) bar();

扫码关注云+社区

领取腾讯云代金券