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

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

  •  
  •   professorz · Jun 3, 2015 · 26853 views
    This topic created in 4009 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
        1
    w99wen  
       Jun 3, 2015
    不用打回车换行了
    不然多按好几个键。
    我比较懒。
    scarlex
        2
    scarlex  
       Jun 3, 2015
    习惯而已
    binjoo
        3
    binjoo  
       Jun 3, 2015
    基督教的好处是什么?佛教的好处是什么?

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

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

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

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

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

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

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

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

    if(this && that); {

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

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

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

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

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

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

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

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

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

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

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

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

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

    ---

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





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

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

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


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

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

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

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

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

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

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

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

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

    if(){
    ...
    exit
    }

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

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

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

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