• 请不要在回答技术问题时复制粘贴 AI 生成的内容
professorz
V2EX  ›  程序员

写代码花括号不另起一行的好处是什么

  •  
  •   professorz · Jun 3, 2015 · 27858 views
    This topic created in 4172 days ago, the information mentioned may be changed or developed.

    另起一行的好处:
    没有编辑器提示的情况下仍然能轻松的看出内外关系;
    对称,美观。

    Supplement 1  ·  Jun 3, 2015
    到现在,看到的原因有:
    减少代码行数,同样高度看更多代码。
    (习惯、项目统一那个不在讨论范围内)
    Supplement 2  ·  Jun 3, 2015
    又看到了一些。
    少敲回车键(汗)
    js里面函数名和函数体在一起比较好(我确实遇到过sublime text收缩代码的问题)
    Supplement 3  ·  Jun 4, 2015
    借着这个帖子说一个不相关的事情吧,今天就在身边,发生了让人唏嘘的事情,某来公司开会的哥们在公司洗手间晕倒,医生带走时心电图已平了。
    希望大家一是都重视身体健康,毕竟你的身体这么些年你好你坏都正常运转着。
    二是都学一些急救常识,有人晕倒口吐白沫,可能是癫痫,但观察如果呼吸脉搏出现问题,要快打120,尽快(骤停4min~6min内)做CPR。CPR:http://baike.baidu.com/view/236782.htm
    希望对大家有点帮助吧。祝大家平安喜乐。
    102 replies  •  2015-06-07 15:00:15 +08:00
    1  2  
    ❮ ❯
    w99wen
    w99wen
    Jun 3, 2015
    1
    不用打回车换行了
    不然多按好几个键。
    我比较懒。
    scarlex
    scarlex
    Jun 3, 2015
    2
    习惯而已
    binjoo
    binjoo
    Jun 3, 2015
    3
    基督教的好处是什么?佛教的好处是什么?

    是否另起一行只是教派不同而已。。。
    hooluupog
    hooluupog
    Jun 3, 2015
    4
    晕,开撕了,我写代码去。。。
    omi4399
    omi4399
    Jun 3, 2015
    5
    这么写高兴。
    czheo
    czheo
    Jun 3, 2015 via iPhone
    6
    节约行数
    FrankFang128
    FrankFang128
    Jun 3, 2015
    7
    你说的这个好处根本就不是特有的好吗
    laoyur
    laoyur
    Jun 3, 2015❤️1
    8
    以前我也是另起一行党,也是跟你同样的观点。
    但我现在转变成不另起一行了,熟悉之后也还是能比较轻松地看出内外关系,真的,所以那条理由其实不成立。
    而不另起一行的好处是,可以有效减少行数,同样高度内显示的内容更多,更容易把控代码前后关系
    maikcn
    maikcn
    Jun 3, 2015❤️1
    9
    人生苦短,我用Python
    v2gba
    v2gba
    Jun 3, 2015
    10
    我一开始也是换行的
    后来看身边的教授, 大牛, 以及操作系统等代码都是不换行
    就跟着学了..

    后来发现行数少带来的优点也不少, 而且习惯后不换行的情况下也能分清block
    hxtheone
    hxtheone
    Jun 3, 2015
    11
    大括号不换行通过行首的缩进也能很清楚的看出层级啊

    话说看代码的内外关系还需要编辑器提示?
    TuxcraFt
    TuxcraFt
    Jun 3, 2015
    12
    不过还是比 begin 和 end 要好
    Wangxf
    Wangxf
    Jun 3, 2015
    13
    最大的好处就是不会在细节上面花太多时间,反正很明显的看到区块
    fo2w
    fo2w
    Jun 3, 2015
    14
    换了十几年行, 现在不换行了, 没别的, 年纪大了, 眼神不好, 换行了一眼望去代码跟撒欢儿似得零零碎碎, 看得头大
    magicdawn
    magicdawn
    Jun 3, 2015
    15
    写C#换行,写JS不换行,写golang 不是我自己说了算
    CodeDrift
    CodeDrift
    Jun 3, 2015
    17
    突然想起我大python ~
    timothyye
    timothyye
    Jun 3, 2015
    18
    据说这个实际上程序员只有两种,一种是花括号换行的,一种是花括号不换行的……
    tangooricha
    tangooricha
    Jun 3, 2015
    19
    @professorz 老板算工作量的时候,可以有效地给老板省钱啊!
    jokester
    jokester
    Jun 3, 2015
    20
    no tell u
    mozartgho
    mozartgho
    Jun 3, 2015
    21
    自己习惯了就好,我是当年自学C语言,用的K&R的书。
    sketch33
    sketch33
    Jun 3, 2015
    22
    同意ls的:而不另起一行的好处是,可以有效减少行数,同样高度内显示的内容更多
    forrestchang
    forrestchang
    Jun 3, 2015
    23
    如果阅读过《代码大全》的人肯定知道,大多数人另起一行的括号写法是错误的。在正确写法的前提下,另起一行和不另起一行看个人习惯了。

    协同开发的时候应当遵循统一的代码规范。
    xifangczy
    xifangczy
    Jun 3, 2015
    24
    python 哭晕.
    mcfog
    mcfog
    Jun 3, 2015
    25
    宇宙最好的语言表示,class interface和trait的花括号换行,控制结构if while switch for foreach的不换行~
    SuujonH
    SuujonH
    Jun 3, 2015
    26
    增加键盘回车键寿命,减少地球的能源使用,降低了武器的制造成本,为了对抗隔壁星球的老王打下坚实的基础
    lingo233
    lingo233
    Jun 3, 2015 via Android
    27
    没啥,在世界之初有两种c一种是the c一种是谭浩强c所以括号只是个历史遗留问题
    timi
    timi
    Jun 3, 2015
    28
    以前都是另起一行,奈何公司规范要求同行。。。
    目前感觉,如果代码行数少的话,同行舒服,代码行数多的话,另起一行看的舒服(能通过缩进找到另一个括号,我相信人眼对括号的匹配的优先级要高于对括号+字母的优先级的。。)
    caoyue
    caoyue
    Jun 3, 2015
    29
    先看语言和项目代码规范吧,然后就看个人喜好了

    不过学 js 的时候遇到过这样的坑=-=
    return
    {
    x:y
    }
    jun4rui
    jun4rui
    Jun 3, 2015
    30
    少按一下键就是优点了,你看javascript这种语言连冒号都建议用''单引号而不用"",就是因为可以省掉左手去按SHIFT……
    jadetang
    jadetang
    Jun 3, 2015
    31
    如果公司是按照代码行数算工作量的话,另起一行当然好些,蚊子腿也是肉
    popu111
    popu111
    Jun 3, 2015
    32
    我就是舒服。。。有的人花括号不光换行还再来一下,看的时候也是醉了。。。
    iyangyuan
    iyangyuan
    Jun 3, 2015 via iPhone
    33
    习惯
    vietor
    vietor
    Jun 3, 2015
    34
    省了一个空行,看起来更紧凑。
    此外,也很美观呢,也可以看出层次关系呢,毕竟缩紧很明显、下括号也是存在的。

    也就说你提的两个理由,没一个站住脚。
    otakustay
    otakustay
    Jun 3, 2015
    35
    不用花括号都能看内外关系了(python开发者如是说),换不换行和内外关系就没啥关系了- -
    yellowV2ex
    yellowV2ex
    Jun 3, 2015❤️1
    36
    尿尿不抖几下的好处是什么?
    cmheia
    cmheia
    Jun 3, 2015
    37
    @laoyur “同样高度内显示的内容更多,更容易把控代码前后关系”+1
    显示器太小就是坑
    bingu
    bingu
    Jun 3, 2015
    38
    一直没搞懂为什么要另起一行放一个花括号
    1023400273
    1023400273
    Jun 3, 2015
    39
    强迫症表示不换行受不了
    xlrtx
    xlrtx
    Jun 3, 2015
    40
    @tangooricha 应该压缩下算下, 按照信息熵来开工资..
    JeremyWang
    JeremyWang
    Jun 3, 2015
    41
    @xlrtx 厉害~~
    Gonster
    Gonster
    Jun 3, 2015 via iPhone
    42
    看到帖子必须吐槽一下javascript自动加分号:P
    linux40
    linux40
    Jun 3, 2015
    43
    支持楼主。。。
    kxxoling
    kxxoling
    Jun 3, 2015
    44
    >>> from __future__ import braces
    File "<ipython-input-8-2aebb3fc8ecf>", line 1
    from __future__ import braces
    SyntaxError: not a chance
    hiddenman
    hiddenman
    Jun 3, 2015
    45
    @maikcn 论空格和tab的区别,哈
    21grams
    21grams
    Jun 3, 2015
    46
    其实没啥好处,就是以前显示器屏幕小,可以省一行的空间。现在都是高分屏了,没实际意义了,只有传统意义。
    xenme
    xenme
    Jun 3, 2015
    47
    像我这样,一会儿换行,一会儿不换行的怎么破。
    lilydjwg
    lilydjwg
    Jun 3, 2015
    48
    1. 节约垂直空间。有人声称当函数超过一屏时 bug 数会加倍呢。
    2. 防止意外,如一不小心写了这种

    if(this && that);
    {
    do this;
    }

    你自己盯十遍也不一定能发现。但是如果是这样:

    if(this && that); {

    你就会发现 ); { 这里很不和谐(因为这种字符组合很罕见,而 ); 这个很常见)。

    当然这些如果开 -Wall 的话编译器会提示你的。

    3. 没有编辑器提示的情况下仍然能轻松的看出内外关系。只要从 } 垂直向上找,遇到字符就说明到达此区块开始了(当然还得跳过宏)。而分开写,开始处占了俩逻辑行,感觉不好。反正我是这么觉得的,也许是因为不换行的代码见太多了。
    lilydjwg
    lilydjwg
    Jun 3, 2015
    49
    @w99wen 在我这里,两种写法所需要的按键数通常是一样的:

    1. ) 空格 {
    2. ) 回车 {

    缩进编辑器会帮我处理。
    zhs227
    zhs227
    Jun 3, 2015
    50
    这是个哲学问题,最早的部分规范推荐是大括号不重起一行的。

    看起来其实也没有那么不方便。

    +-----/
    ------/
    -----/
    ----/
    ---/
    --/
    -/
    }

    不重启一行的阅读方法是,你顺着括号收网上看,看到的第一个字母就是大括号开始的那一行。看上去像个倒三角形的样子。

    习惯了都很好。可以节省版面。
    zyxfsky
    zyxfsky
    Jun 3, 2015
    51
    自从改Python后,就和大括号88了
    qw7692336
    qw7692336
    Jun 3, 2015
    52
    我喜欢紧凑的代码,行数太多、太长的代码不好看。我不喜欢加多余的空格。很多人喜欢在加号"+"的前后分别加上空格,我就不喜欢这么做,松散的代码不好看。
    qw7692336
    qw7692336
    Jun 3, 2015
    53
    @lilydjwg

    1. ) 空格 {
    2. ) 回车 {

    以上两种我都不喜欢,我是喜欢
    ){
    更加紧凑
    ooh
    ooh
    Jun 3, 2015
    54
    @timothyye 还有一种都不换号{}
    znoodl
    znoodl
    Jun 3, 2015
    55
    一个经常遇到的bug:
    while(i == 1);
    {
    }
    上面如果括号内为真,大括号的内容不会被执行
    while(i == 1){
    }
    fulvaz
    fulvaz
    Jun 3, 2015
    56
    额...又是这个题目啊
    -------------

    void doSomeThing(para...) {
    int a;
    function();
    }
    函数名和函数体应该是有关联的,在你读代码的时候,不空行可以显示出这种关联
    另外这样少占一行,还是方便阅读

    另外,python没有{}, 更加好,缩进已经能够反映这种关联关系

    ---

    对我就是跟我老板学的
    flowfire
    flowfire
    Jun 3, 2015
    57
    可以有效防止强迫症患者阅读你的代码。。。
    feiyunruyue
    feiyunruyue
    Jun 3, 2015
    58
    go语言要求必须这么搞
    BB9z
    BB9z
    Jun 3, 2015
    59
    不换行党,理由:大部分编辑器折叠后的样式更好。
    GG668v26Fd55CP5W
    GG668v26Fd55CP5W
    Jun 3, 2015 via iPhone
    60
    习惯使然
    lincanbin
    lincanbin
    Jun 3, 2015
    61
    http://www.94cb.com/Pythonic-PHP-Code-Formatter/





    好处还是蛮多的诶,你不觉得这样看起来清爽很多么?
    zhangjk1993
    zhangjk1993
    Jun 3, 2015
    62
    看着爽
    lilydjwg
    lilydjwg
    Jun 3, 2015
    63
    @qw7692336 嗯,那的确又省了一个键。我两种都用,好像是取决于语种和上下文……
    gateswong
    gateswong
    Jun 3, 2015
    64
    一开始我写代码的笔记本是1366x768的分辨率,然后标题栏占一点儿高度,菜单栏占一点儿高度,工具栏占一点儿高度,标签栏占一点儿高度,下面调试或者什么乱七八糟的信息栏占一点儿高度。最后编辑器可视区域也就10行多一点儿。

    所以坚决的从换行党切换到不换行党了……

    不过有例外的情况,就是C#。Visual Studio 似乎是强制C#换行花括号的,所以直接就顺着VS来了。


    @lincanbin 你给的这个图片有种说不出的怪异,可能是有点儿python的感觉了吧。

    @znoodl 这种情况都是手滑多写了个分号吧?

    @qw7692336 我觉得加了空格蛮舒服的,只有一种情况不加空格:
    b = a[i+1];
    就比
    b = a[i + 1];
    要好看一点儿

    @caoyue 虽然没细学过Javascript不过感觉这个坑是因为js语句可以有也可以没有分号是吧?
    winoros
    winoros
    Jun 3, 2015
    65
    两种风格,感觉主要是个人习惯的问题吧
    现在是右括号不换行,个人原因是感觉看起来顺眼好多,而且,换行之后造成的无意义空间多了好多
    xgdyhaiyang
    xgdyhaiyang
    Jun 3, 2015
    66
    @lincanbin 还是写Python吧
    Felldeadbird
    Felldeadbird
    Jun 3, 2015
    67
    contol + shitf + f:什么格式对我来说重要吗?
    wqlfighter
    wqlfighter
    Jun 3, 2015
    68
    谷歌有C++一套开发格式,目前感觉的确挺舒服
    DejaVud
    DejaVud
    Jun 3, 2015
    69
    美观.

    认为另起一行美观是因为对称,但是我认为我的审美更符合以下第2种:
    1)花括号另起一行
    ++++++
    +
    +++
    +++++
    ++++++
    +++++
    +++
    +

    2)花括号跟在后面
    ++++++
    +++++
    ++++
    +++
    ++
    +
    lilydjwg
    lilydjwg
    Jun 4, 2015
    70
    @Felldeadbird 你可以把所有代码都写到一行试试 :-D
    bdbai
    bdbai
    Jun 4, 2015 via iPhone
    71
    @forrestchang Visual Studio哭瞎在厕所
    FrankHB
    FrankHB
    Jun 4, 2015
    72
    想要省空间省回车的,干脆就用没括号的算了。(虽然一写在纸上换页然后就容易呵呵了。)
    要是不爽这坨,用Lisp风格不就行了,这不更节约行数么。
    说到底凭什么}非得吊车尾而{就不行呢?完全没理性的理由,只是习惯罢了。基于}经常占据了单独的行这个现实,说节约行数是主要目的的,我很怀疑有没有花时间想过这里的问题。
    另外,K&R也不是照搬的理由。注意一下K&R C函数体内部的块的{}和其它{}还不都一样,显然并不是任何时候都把{前的换行删除。另外值得一提的是,函数体层次上和内部块的{}风格不一样和函数体必须是复合语句这些artifacts现在看来都是K&R C旧参数声明语法的遗毒。
    FrankHB
    FrankHB
    Jun 4, 2015
    73
    @lilydjwg 这种错误怎么看也没比自作主张脑补;的语言来得混乱。既然后者都能接受,前者又有啥大不了的呢。
    真不爽的怕错的,直接禁止然后源码里正则暴搜干掉所有\);(?=\r?$)得了。这种检查还方便自动化实现。

    倒三角形美观?完全不明觉厉。先看长的代码再看短的代码心情会好么。至少汉字的文章按这种构造写看起来挺奇怪的。
    df4VW
    df4VW
    Jun 4, 2015
    74
    不会有的时候merge中间插了别的东西这个函数就崩了
    lilydjwg
    lilydjwg
    Jun 4, 2015
    75
    @FrankHB } 放上一行的话添加、移动代码不便的。但是 { 放在 if / for / while 行没有这个问题,反正我是不用 if (x) y; 这种不用 { } 的单行 if 块,往里边添加东西太麻烦。

    我并不接受自己添加 ; 的语言。写 JavaScript 都是显式写 ; 的。我说了,「);$」这个组合是非常常见的,比如 a = func(); 你检查下一行是不是单一个 { 也没用,因为有时候 { } 不会跟着 if / for / while 出现,只是用来划分作用域的。

    我也不觉得倒三角美观,还嘲笑过 Lua 里有很多很大的由 end 构成斜边的倒三角呢。但是也没觉得有什么问题。GNU 那种风格才会觉得有问题。
    kn007
    kn007
    Jun 4, 2015
    76
    一般
    if ()
    exit

    if(){
    ...
    exit
    }

    习惯问题吧,如果没有大括号,就觉得下句就结束了(习惯问题)
    dslwind
    dslwind
    Jun 4, 2015 via Android
    77
    Python党笑而不语
    exoticknight
    exoticknight
    Jun 4, 2015
    78
    能够用格式工具统一的问题就不要自寻烦恼
    rayyang88
    rayyang88
    Jun 4, 2015
    79
    因为Go不这样写会报错编译不过。。
    Hyperion
    Hyperion
    Jun 4, 2015 via Android
    80
    坚决换行,我就喜欢...
    yibin001
    yibin001
    Jun 4, 2015
    81
    golang就是这么要求的。。。。不这样写报错。
    pljhonglu
    pljhonglu
    Jun 4, 2015
    82
    节省垂直空间,代码到处是空行,阅读的时候狂滚鼠标滚轮,而且一屏还看不了多少有用的代码,多抓狂啊。

    现在的编辑器本身就带括号匹配,很容易就找到 block 了
    lvfujun
    lvfujun
    Jun 4, 2015
    83
    @MrGba2z 你考虑过后面维护你代码的童鞋么.
    原型代码为了容易DEBUG和易读性都是换行写的.到了代码封装上线的时候才会用工具去掉换行.你们的professor和大牛这么写......恩我不多说......很多牛逼的人都是不考虑别人的.
    lvfujun
    lvfujun
    Jun 4, 2015
    84
    @lincanbin 你比较适合用Py
    babyname
    babyname
    Jun 4, 2015
    85
    }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
    节约浏览空间和纸张
    willbin
    willbin
    Jun 4, 2015
    86
    首先, 必须有括号(没啥好处, 但不这样做有坏处)
    第二,尽量换一行(好处:想把判断条件忽略时, 直接把if行注释就行, 如果括号在同一行就呵呵了)
    iwinux
    iwinux
    Jun 4, 2015
    87
    另起一行太丑
    DingSoung
    DingSoung
    Jun 4, 2015
    88
    换行太丑 +1
    ivenvd
    ivenvd
    Jun 4, 2015
    89
    1. 我总是有编辑器提示。
    2. 另起一行太丑。
    ikaros
    ikaros
    Jun 4, 2015
    90
    golang强制要求不换行,而且看起来挺美观的,就一直这样写了
    chisj
    chisj
    Jun 4, 2015
    91
    与kernel保持一致风格,习惯了而已,并没有什么好处。就像要另起一行又有什么好处?
    101
    101
    Jun 4, 2015
    92
    所以说不要再搞党争了,一命呜呼啥也没用
    littleshy
    littleshy
    Jun 4, 2015
    93
    我随便,只是vs帮我格式化好了。
    wizardoz
    wizardoz
    Jun 4, 2015
    94
    @21grams 其实我永远觉得显示器不够大。原来想把显示器竖起来用,后来发现竖起来分屏用太窄了。
    FrankHB
    FrankHB
    Jun 4, 2015
    95
    @lilydjwg 好吧,漏了,\)的前面得是(for|while|if).+。我也不用单行块也不接受自己乱加;,所以没这类问题。
    另外-Wall应该还是基于语义的,如果循环条件带副作用可能靠不住。

    倒三角的评论应该分开回复……
    GNU风格的最明显问题在于,它让制表符宽度一旦不是特定的一些预设值看起来就很糟糕,还不如都空格算了。

    @chisj 都是习惯没错,但硬要说成一回事,“并没有什么好处”,不符合事实。
    另起一行在习惯以外的好处,上面至少已经有人说了两个:人肉匹配块的边界更快;临时注释if等方便。(不管时常进行这些操作是不是习惯,对习惯或不习惯的用户来说效果应该都是类似的。)
    而不另起一行的好处,也有提到了两个:节约行数;避免手贱错误地插入分号之类。
    但是我已经指出过后者的这些理由很不一样:节约行数很不彻底,明显不如}}}};即使能减少一些具有良好编码习惯的用户很少发生的输入错误,也远不如另外进行语法检查靠谱。
    所以我仍然好奇习惯以外到底有什么决定性优点。
    vjnjc
    vjnjc
    Jun 4, 2015
    96
    主要就是减少代码行数,少一行{就多一行有效代码在视野里。
    nilbot
    nilbot
    Jun 4, 2015❤️1
    97
    原来B语言有出现过一个设计,不用分号当句子(statement)结尾,那么从语法上来说花括号为了不产生歧义就不能另起一行了,后来C语言并没有坚持这种设计。实际上Ken后来还是觉得原来的设计好,这就是为什么Go强迫花括号不能另起一行:分号没有了。
    alphonsez
    alphonsez
    Jun 5, 2015❤️1
    98
    写C#就另起一行,写Java就不另起一行,写C++就看最近用的是C#还是Java
    lzjun
    lzjun
    Jun 5, 2015
    99
    v2gba
    v2gba
    Jun 5, 2015 via iPhone
    100
    @lvfujun 当初我纠结的时候特地看了看Google的C++规范 他们就是不换行的
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1698 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 269ms · UTC 23:40 · PVG 07:40 · LAX 15:40 · JFK 18:40
    ♥ Do have faith in what you're doing.