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

代码风格,是一件头疼的事情

  •  1
     
  •   changnet · Jul 23, 2017 · 11810 views
    This topic created in 3394 days ago, the information mentioned may be changed or developed.

    代码风格,不能没有。但是又没有对错,混用各种风格,非常头疼。

    在游戏公司上班,现在用的框架常用是 C++作底层,Lua 作上层脚本。但是这个框架非常古老,我估计 10 年以上了。期间经历无数项目,无数人来来去去。代码风格混乱。

    • C++采用大驼峰写法
    • Lua 采用小驼峰
    • 空格、Tab 混用
    • 2 个字符、4 个字符宽度缩进混用

    公司并没有严格的代码审核。每次新项目时,上头都是:这个功能之前的项目已经有了,就不用重新做了。重构这种东西,不存在的,时间才是最重要的。 然后实际做的时候又发现和现在的设定有点不一样,就继续在原文件上改。

    加上个人的原因,我喜欢在函数的括号前后加一空格,但是另人都不加。 我是

    void Player:SendPosition( int x,int y ); 
    

    别人是

    void Player:SendPosition(int x,int y); 
    

    而且最近业余看点 egret 的东西,主要是 js,这就更令人崩溃了。js 的大括号是不换行的,而我之前写的 C++都是换的。已经写了 4 年代码了,而且自己业余写的一些东西,风格已经固定,不想再换了。但是不换,在各种语言中混着写感觉就像精神分裂一样。

    72 replies  •  2018-09-22 18:14:04 +08:00
    ansheng
    ansheng
    Jul 23, 2017
    1
    每种编程语言都有自己的规范,官方承认的规范,跟着那个写就好了,不过经常来回切换语言确实有些蛋疼
    iEverX
    iEverX
    Jul 23, 2017❤️5
    2
    风格没有对错,重在统一。所以参与项目,就按照项目的风格来,即使一个项目里面的 java 是下划线的,那也应该是下划线的
    mornlight
    mornlight
    Jul 23, 2017❤️5
    3
    仅针对你说的在函数的括号前后加一空格这一点我倒是觉得有点新奇,通常是逗号后面有空格,没见过括号后面有的。
    sunriseyuen
    sunriseyuen
    Jul 23, 2017 via Android
    4
    不是用工具格式化就好了吗
    Technetiumer
    Technetiumer
    Jul 23, 2017 via Android❤️2
    5
    我习惯逗号后面有空格

    void Player:SendPosition(int x, int y);
    feiyuanqiu
    feiyuanqiu
    Jul 23, 2017❤️1
    6
    统一用 google 的 c++ 风格就挺好,再用 clang-format 一键格式化。写的时候随便写,提交的时间全格式化了
    fytriht
    fytriht
    Jul 23, 2017
    7
    用代码格式化工具,自己想怎么缩进都行
    server
    server
    Jul 23, 2017
    8
    说明你还年轻
    Betacoefficient
    Betacoefficient
    Jul 23, 2017
    9
    楼主你没有疯真是一个奇迹。
    k9982874
    k9982874
    Jul 23, 2017 via iPad
    10
    之前我也为这事头疼,做了规范不执行,问为啥不按规范写?对面吊吊的来一句我觉得我的代码风格更好。特别是培训班出来的小屁孩。

    现在简单多了 c/c++就直接摔他一脸 google 规范
    python 就摔 pep8
    php 就摔 psr4
    jls 摔 jls

    外加格式化工具,有意见和标准委员会说去。

    最后加一句 你是 xx 程序员连代码规范都不知道,呵呵。
    boyhailong
    boyhailong
    Jul 23, 2017❤️1
    11
    建议小组讨论大家一起遵守即可
    RLib
    RLib
    Jul 23, 2017
    12
    表示不喜欢在括号前后加一空格, 尖括号除外
    pagxir
    pagxir
    Jul 23, 2017 via Android
    13
    @RLib 表示同意。
    misaka20038numbe
    misaka20038numbe
    Jul 23, 2017
    14
    习惯了代码能不空格就不空格,大括号必须和函数在同一行。
    kmahyyg
    kmahyyg
    Jul 23, 2017 via Android
    15
    @feiyuanqiu 用 python 的有啥 format 工具?
    LZRng
    LZRng
    Jul 23, 2017 via iPhone
    16
    有点犯强迫症了吧,你自己的个人项目可以用你自己的代码风格,如果是团队的话,找他们协商一下统一风格适应一下。另外,我并不赞同你的代码风格……看起来是清晰一些(是不是可以用编辑器写 CSS 实现排版效果?),但多两个不必要的字符反而降低效率。
    cxbig
    cxbig
    Jul 23, 2017
    17
    我司用 JetBrains 家的 IDE,代码风格一开始就确定了,配置文件发给大家,提交代码之前一键格式化就可以。
    这种小事处理不好,公司的管理还是有问题的。
    catror
    catror
    Jul 23, 2017 via Android
    18
    不用格式化工具的话,代码风格模块级统一就行,每个人都有自己的风格,而模块一般也就两三个人写和维护。
    另外,去改别人的代码一定要按照别人的风格来,这个都做不到我觉得不是一个合格的程序员。所以我也很讨厌别人把我的代码改得一团糟。
    zhujinliang
    zhujinliang
    Jul 23, 2017 via iPhone
    19
    vscode 挂上 lint,我最近在适应这个组合,感觉还不错的
    leekafai
    leekafai
    Jul 23, 2017 via Android
    20
    除了 python 那种有规定格式的语法语言,感觉别的语言一般都还是会依照 c 艹的格式吧。
    不敢说绝对,自己的感觉,毕竟大部分都是看谭浩强老师的书入的门。
    hantsy
    hantsy
    Jul 23, 2017
    21
    @k9982874 Google 定义了一套各语言的规范,对于 Java, 还提供了 Eclipse 和 IDEA 配置文件。

    @cxbig @zhujinliang 不过嘛,IDE 是个头痛的事,每个人的习惯不一样, 项目没必要去要求所有人都使用一样的 IDE。

    @feiyuanqiu 一般格式化也不是太大问题,即使不同的 IDE,也可以调整到基本统一。但对于有些特殊情况,比如 IDEA 支持 formater off/on 去保留一些 DSL 形式(可读性强)的 代码,不是所有 IDE 都支持。

    @catror 对于一个团队来讲,合作一段时间后,代码应该只有一种风格,就是团队风格, 而代码的 Style 本来就是应该遵循一些公认的约定。

    @misaka20038numbe 各语言都有不同的 Style,写 Java 的时候一般都是习惯 method 与 { 在同一行。 但 PHP 的 PSR (虽然 PSR 完全 Copy JSR 运作方式) 改变了这一行为, { 要求新开一行。https://github.com/hantsy/angularjs-zf2-sample/blob/master/module/Album/src/Album/Model/Album.php


    @fytriht 说到缩进,想到了美剧硅谷中 Tab 和 Space 那一集。我写 Java 认同用 4 Space (我不喜欢 Google Java Style 中的 2 space ) 代替 tab, 以做到所有 IDE 显示统一。
    Jakesoft
    Jakesoft
    Jul 23, 2017 via iPhone
    22
    @k9982874 psr4 不是代码风格规范,psr1、psr2 才是。
    coderluan
    coderluan
    Jul 23, 2017
    23
    楼主去研究下工具格式化吧,都挺成熟的。

    比如你用的 egret,如果是用自带的 vsc 改版编译器,那样直接改个参数就能改大括号位置。
    feiyuanqiu
    feiyuanqiu
    Jul 23, 2017
    24
    @hantsy google 选择 2 空格缩进是因为他们规定了行宽 80 的限制,缩进占用多了的话会导致代码很多折行
    他们还建议少留空行,这样一屏幕能显示多一点代码...怎么感觉那群人都是用 vim 的...
    shiroming
    shiroming
    Jul 23, 2017 via Android❤️1
    25
    @kmahyyg pycharm 默认就够了 ctrl+alt+L
    LioMore
    LioMore
    Jul 23, 2017
    26
    代码规范很多,可以自己选一个

    @changnet 楼主提到了 JavaScript

    JavaScript 有 JavaScript Standard Style ( https://standardjs.com/)、XO ( https://github.com/sindresorhus/xo) 等
    cxbig
    cxbig
    Jul 23, 2017
    27
    @hantsy
    我只是说我们公司的情况,这不是核心问题。
    拿 PHP 来说,有 php-cs-fixer 这类的命令行工具,无论用什么 Editor 或 IDE 都行。其他语言多少也都有。

    关键的是执行。如果公司不注重,不严格执行代码审查,或各种 CI 工具的自动代码检测,那么抱怨就没有意义。
    底下的人你不服我、我不服你,上头再没个标准,只会越来越乱。
    lusyoe
    lusyoe
    Jul 23, 2017
    28
    我觉得这东西公司内必须要统一个标准,这个通用的模板最好交给 QA 去做。然后让各项目组的 PM 推下去,开发人员遵守就是了。不规范的,在 review 的时候打回去就好啦,说到底规范是一回事,监督和执行才是关键的。。
    wangxn
    wangxn
    Jul 23, 2017 via Android
    29
    @feiyuanqiu Google 规定的行宽是 100 还是 128 来着,反正不是 80。
    wangxn
    wangxn
    Jul 23, 2017 via Android
    30
    100 或者 120。
    feiyuanqiu
    feiyuanqiu
    Jul 23, 2017 via Android
    31
    @wangxn 嗯 java 是 100,c++是 80
    Tovcn
    Tovcn
    Jul 24, 2017 via Android
    32
    目前在写一个代码格式化项目,支持 C 和 C++
    FrankFang128
    FrankFang128
    Jul 24, 2017
    33
    你不用自动格式化工具吗?
    bumz
    bumz
    Jul 24, 2017
    34
    别人是 `void Player:SendPosition(int x, int y);`
    你是 `void Player:SendPosition( int x,int y ); `
    araraloren
    araraloren
    Jul 24, 2017
    35
    @Tovcn 格式化工具不是很多吗,用 clang-format 不就好了。。
    woshixiaohao1982
    woshixiaohao1982
    Jul 24, 2017
    36
    @lusyoe 这玩意还要 QA 格式化工具就搞定了
    woshixiaohao1982
    woshixiaohao1982
    Jul 24, 2017
    37
    搞这些形式主义都是扯淡,,一套 lint 格式化规则才是重点
    allenx
    allenx
    Jul 24, 2017
    38
    你这种写法不符合英文习惯,void init(int x, int y);,括号后面不该加空格,逗号句号等后面才应该加空格。
    jianyunet
    jianyunet
    Jul 24, 2017
    39
    l00t
    l00t
    Jul 24, 2017❤️1
    40
    多大点事。

    工作这么些年来,见过的代码也多了,我觉得所谓代码规范中,排版是最不重要的。大括号跟在后面还是另起一行,这有什么影响吗?代码规范应当是规定一些更实际的内容。比如某些功能应当怎么写,某些操作要不要做保护,某些值要不要做校验,在什么地方校验。这类约定做好了能减少大量协作沟通时间。排版只是细枝末节而已,正常人又不会一行流,无非有各自偏好罢了。
    fds
    fds
    Jul 24, 2017
    41
    用 vscode 写 ts,自动排版基本不用操心。当然还是会遇到单行过长的问题,lint 报错,需要手动换行的。
    wizardoz
    wizardoz
    Jul 24, 2017
    42
    强迫症,你觉得看着别人写的代码跟你风格不统一觉得心里不舒服。但是如果你要求别人全部统一到一种代码风格,有人不认同那种风格的时候他心里更难受。
    特别是多种语言混用的时候,每种语言甚至一个框架都有自己官方认可的一种编程风格。
    本人喜欢在用一种框架的时候就用那种框架使用的编程风格。有时一个项目中我会用两三种。
    hellojl
    hellojl
    Jul 24, 2017
    43
    现在想想,百度内部的解决方案还是不错的,提交之前会有统一的代码风格检查,多一个空格都可能提不上去。现在的公司没有这些规范,代码库还超级大,里面可以说是群魔乱舞了
    bluefalconjun
    bluefalconjun
    Jul 24, 2017
    44
    4 intent 120 其他无所谓...
    gizie
    gizie
    Jul 24, 2017
    45
    看 Google 代码规范。
    其实你的风格也不咋地
    geew
    geew
    Jul 24, 2017
    46
    用 pycharm 之后 强迫症的我看到代码里有波浪线就受不了...
    blogbbs325
    blogbbs325
    Jul 24, 2017
    47
    js 的话用 https://prettier.github.io/prettier/
    自动帮你格式化源码,大家按自己的习惯写,git commit 的时候通过 hook 用 prettier 转换一下
    qcind
    qcind
    Jul 24, 2017
    48
    后生仔,强迫症。
    Felldeadbird
    Felldeadbird
    Jul 24, 2017
    49
    任何代码风格在我的编辑器格式化工具下都是浮云。
    楼主应该合适使用 py 这类语言
    66beta
    66beta
    Jul 24, 2017
    50
    扯这么多没用啊,关键要大家愿意统一一种风格,下次改动什么文件就一起格式化到新的风格
    caiych
    caiych
    Jul 24, 2017
    51
    @wangxn Java 是 100 Go 是无限 其他是 80
    rainex
    rainex
    Jul 24, 2017
    52
    楼主你自己的“喜欢在函数的括号前后加一空格”,这在别人眼里何尝不是一个怪癖?

    统一代码风格需要团队头儿的要求,想推行自己的观点,需要你有发言权甚至决策权力。

    不过等你负责团队了,就怕你的下属又跑 v2 来发帖说强制括号前后都加空格,怪癖真恶心= =
    vjnjc
    vjnjc
    Jul 24, 2017
    53
    这时候不是应该根据代码附近的风格为参照么
    kneep
    kneep
    Jul 24, 2017 via iPhone
    54
    你这加空格就属于异端,不知道别人怎么看你,呵呵
    bombless
    bombless
    Jul 24, 2017
    55
    仅针对你说的在函数的括号前后加一空格这一点我倒是觉得有点新奇,通常是逗号后面有空格,没见过括号后面有的。 +1

    commit 钩子里做 lint,大家全部用格式化工具格式化提交就好了
    旧代码做一个巨大的 commit 把所有代码都格式化

    C++代码和 Lua 代码风格不一样是正常的,一样就奇葩了
    dreamwar
    dreamwar
    Jul 24, 2017
    56
    感觉还是看学的时候接触的代码都什么风格...
    很多人都是被教的人或者带的人给带跑偏了
    marvinwilliam
    marvinwilliam
    Jul 24, 2017
    57
    editorconfig 让编辑器自己去玩吧....
    sirqiao
    sirqiao
    Jul 24, 2017
    58
    可以考虑实现一个 parser,然后再按自己的习惯把 ast 吐成自己习惯的格式。。。
    yanxijian
    yanxijian
    Jul 24, 2017
    59
    @Technetiumer +1,括号两边有空格感觉好奇怪
    sampeng
    sampeng
    Jul 24, 2017
    60
    代码风格。。谁有拳头,谁说了算。
    反正我拿到任何文件都是 ide 自动 format 文件格式。。。
    rocksolid
    rocksolid
    Jul 24, 2017
    61
    团队能遵守约定的那就统一,不行的话就自动
    darklowly
    darklowly
    Jul 24, 2017
    62
    楼主还是太死板。

    1 代码风格是团队的。
    2 不要坚持一种代码风格,在不同语言,不同项目下,要遵守该语言,该项目的风格。

    例如 C 语言函数声明有 4 种:
    c: void fuck_you(void)
    c: void fuckYou(void)
    c: void 换行 fuck_you(void)
    c: void 换行 fuckYou(void)
    这是同一种语言下,不同项目的约定。

    同样的,不同语言,也有不同的社区约定。
    TIGERB
    TIGERB
    Jul 24, 2017
    63
    还是 GO 牛逼,哈哈,语言级别直接可以统一风格,哈哈~
    ech0x
    ech0x
    Jul 24, 2017 via iPhone
    64
    @TIGERB 我记得 go 格式化的工具是自带的是吧
    TIGERB
    TIGERB
    Jul 24, 2017
    65
    @ech0x 嗯嗯,是啊,自己就提供了代码格式化工具
    Cbdy
    Cbdy
    Jul 24, 2017 via Android
    66
    我写 c 的时候用 kr 风格,但是空格四格缩进
    java、pyhon 没啥争议,随大流
    js 模块名连字符,变量小驼峰,类大驼峰,不加分号
    当然,团队协作的时候会加 lint
    quinoa42
    quinoa42
    Jul 25, 2017
    67
    我现在写 C/C#也把{写在同一行了😂
    Erskine
    Erskine
    Jul 25, 2017 via Android
    68
    真羡慕你们能看到空格的,我已经块看不见空格了 好方
    caniuse
    caniuse
    Jul 25, 2017
    69
    喜欢 go 的代码风格,写 php c js 全部用 go 代码风格
    zh5e
    zh5e
    Jul 25, 2017
    70
    用 astyle 工具,相同参数来统一编码风格 - -
    leo937549163
    leo937549163
    Jul 25, 2017 via Android
    71
    js...@flow
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   727 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 182ms · UTC 22:53 · PVG 06:53 · LAX 14:53 · JFK 17:53
    ♥ Do have faith in what you're doing.