首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么省略大括号被认为是一种糟糕的做法?

为什么省略大括号被认为是一种糟糕的做法?
EN

Stack Overflow用户
提问于 2008-12-11 15:34:23
回答 52查看 63.1K关注 0票数 183

为什么每个人都告诉我像这样写代码是一种糟糕的做法?

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. 还有我遗漏的另一个论点吗?
EN

回答 52

Stack Overflow用户

回答已采纳

发布于 2008-12-11 15:39:15

实际上,唯一让我感到头疼的是我在调试的时候,并且注释掉了bar():

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

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

if(foo) bar();

它负责处理上面的情况。

EDIT谢谢你澄清了这个问题,我同意,我们不应该写最小公分母的代码。

票数 187
EN

Stack Overflow用户

发布于 2008-12-11 22:58:52

阅读速度...

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

if (condition)
{
    DoSomething();
}

DoSomethingElse();

比我读得快一点:

if (condition) DoSomething();

DoSomethingElse();

如果它看起来像这样,我会读得慢一点:

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

我读这篇文章的速度比上一篇慢得多:

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

因为我忍不住又读了一遍,以防万一,不知道作者是不是故意的:

if (condition)
{
    DoSomething();
    DoSomethingElse();
}

已经在一般情况下讨论过了,但是当涉及到下面的阅读时,我将研究很长一段时间以确定作者的意图。我甚至可能会找到原作者来确认。

if (condition) 
    DoSomething();
    DoSomethingElse();
票数 158
EN

Stack Overflow用户

发布于 2008-12-11 15:47:08

如果是小的东西,就写成这样:

if(foo()) bar();

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

票数 55
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/359732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档