代码风格,不能没有。但是又没有对错,混用各种风格,非常头疼。
在游戏公司上班,现在用的框架常用是 C++作底层,Lua 作上层脚本。但是这个框架非常古老,我估计 10 年以上了。期间经历无数项目,无数人来来去去。代码风格混乱。
公司并没有严格的代码审核。每次新项目时,上头都是:这个功能之前的项目已经有了,就不用重新做了。重构这种东西,不存在的,时间才是最重要的。 然后实际做的时候又发现和现在的设定有点不一样,就继续在原文件上改。
加上个人的原因,我喜欢在函数的括号前后加一空格,但是另人都不加。 我是
void Player:SendPosition( int x,int y ); 
别人是
void Player:SendPosition(int x,int y); 
而且最近业余看点 egret 的东西,主要是 js,这就更令人崩溃了。js 的大括号是不换行的,而我之前写的 C++都是换的。已经写了 4 年代码了,而且自己业余写的一些东西,风格已经固定,不想再换了。但是不换,在各种语言中混着写感觉就像精神分裂一样。
|      1ansheng      2017-07-23 14:32:55 +08:00 每种编程语言都有自己的规范,官方承认的规范,跟着那个写就好了,不过经常来回切换语言确实有些蛋疼 | 
|  |      2iEverX      2017-07-23 14:33:37 +08:00  5 风格没有对错,重在统一。所以参与项目,就按照项目的风格来,即使一个项目里面的 java 是下划线的,那也应该是下划线的 | 
|  |      3mornlight      2017-07-23 15:08:31 +08:00  5 仅针对你说的在函数的括号前后加一空格这一点我倒是觉得有点新奇,通常是逗号后面有空格,没见过括号后面有的。 | 
|      4sunriseyuen      2017-07-23 15:11:37 +08:00 via Android 不是用工具格式化就好了吗 | 
|  |      5Technetiumer      2017-07-23 15:14:27 +08:00 via Android  2 我习惯逗号后面有空格  void Player:SendPosition(int x, int y); | 
|      6feiyuanqiu      2017-07-23 15:21:03 +08:00  1 统一用 google 的 c++ 风格就挺好,再用 clang-format 一键格式化。写的时候随便写,提交的时间全格式化了 | 
|      7fytriht      2017-07-23 15:56:54 +08:00 用代码格式化工具,自己想怎么缩进都行 | 
|  |      8server      2017-07-23 15:59:39 +08:00 说明你还年轻 | 
|      9Betacoefficient      2017-07-23 16:03:21 +08:00 楼主你没有疯真是一个奇迹。 | 
|  |      10k9982874      2017-07-23 16:27:30 +08:00 via iPad 之前我也为这事头疼,做了规范不执行,问为啥不按规范写?对面吊吊的来一句我觉得我的代码风格更好。特别是培训班出来的小屁孩。 现在简单多了 c/c++就直接摔他一脸 google 规范 python 就摔 pep8 php 就摔 psr4 jls 摔 jls 外加格式化工具,有意见和标准委员会说去。 最后加一句 你是 xx 程序员连代码规范都不知道,呵呵。 | 
|  |      11boyhailong      2017-07-23 16:33:21 +08:00  1 建议小组讨论大家一起遵守即可 | 
|  |      12RLib      2017-07-23 16:41:23 +08:00 表示不喜欢在括号前后加一空格, 尖括号除外 | 
|  |      14misaka20038numbe      2017-07-23 17:48:13 +08:00 习惯了代码能不空格就不空格,大括号必须和函数在同一行。 | 
|  |      15kmahyyg      2017-07-23 17:53:32 +08:00 via Android @feiyuanqiu 用 python 的有啥 format 工具? | 
|  |      16LZRng      2017-07-23 18:07:30 +08:00 via iPhone 有点犯强迫症了吧,你自己的个人项目可以用你自己的代码风格,如果是团队的话,找他们协商一下统一风格适应一下。另外,我并不赞同你的代码风格……看起来是清晰一些(是不是可以用编辑器写 CSS 实现排版效果?),但多两个不必要的字符反而降低效率。 | 
|  |      17cxbig      2017-07-23 18:09:25 +08:00 我司用 JetBrains 家的 IDE,代码风格一开始就确定了,配置文件发给大家,提交代码之前一键格式化就可以。 这种小事处理不好,公司的管理还是有问题的。 | 
|  |      18catror      2017-07-23 18:18:43 +08:00 via Android 不用格式化工具的话,代码风格模块级统一就行,每个人都有自己的风格,而模块一般也就两三个人写和维护。 另外,去改别人的代码一定要按照别人的风格来,这个都做不到我觉得不是一个合格的程序员。所以我也很讨厌别人把我的代码改得一团糟。 | 
|  |      19zhujinliang      2017-07-23 18:43:34 +08:00 via iPhone vscode 挂上 lint,我最近在适应这个组合,感觉还不错的 | 
|  |      20leekafai      2017-07-23 18:50:16 +08:00 via Android 除了 python 那种有规定格式的语法语言,感觉别的语言一般都还是会依照 c 艹的格式吧。 不敢说绝对,自己的感觉,毕竟大部分都是看谭浩强老师的书入的门。 | 
|      21hantsy      2017-07-23 19:06:42 +08:00 @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 显示统一。 | 
|  |      23coderluan      2017-07-23 19:26:02 +08:00 楼主去研究下工具格式化吧,都挺成熟的。 比如你用的 egret,如果是用自带的 vsc 改版编译器,那样直接改个参数就能改大括号位置。 | 
|      24feiyuanqiu      2017-07-23 19:38:14 +08:00 @hantsy google 选择 2 空格缩进是因为他们规定了行宽 80 的限制,缩进占用多了的话会导致代码很多折行 他们还建议少留空行,这样一屏幕能显示多一点代码...怎么感觉那群人都是用 vim 的... | 
|  |      26LioMore      2017-07-23 20:45:42 +08:00 代码规范很多,可以自己选一个 @changnet 楼主提到了 JavaScript JavaScript 有 JavaScript Standard Style ( https://standardjs.com/)、XO ( https://github.com/sindresorhus/xo) 等 | 
|  |      27cxbig      2017-07-23 21:16:48 +08:00 @hantsy  我只是说我们公司的情况,这不是核心问题。 拿 PHP 来说,有 php-cs-fixer 这类的命令行工具,无论用什么 Editor 或 IDE 都行。其他语言多少也都有。 关键的是执行。如果公司不注重,不严格执行代码审查,或各种 CI 工具的自动代码检测,那么抱怨就没有意义。 底下的人你不服我、我不服你,上头再没个标准,只会越来越乱。 | 
|  |      28lusyoe      2017-07-23 21:36:31 +08:00 我觉得这东西公司内必须要统一个标准,这个通用的模板最好交给 QA 去做。然后让各项目组的 PM 推下去,开发人员遵守就是了。不规范的,在 review 的时候打回去就好啦,说到底规范是一回事,监督和执行才是关键的。。 | 
|      29wangxn      2017-07-23 23:00:25 +08:00 via Android @feiyuanqiu Google 规定的行宽是 100 还是 128 来着,反正不是 80。 | 
|      30wangxn      2017-07-23 23:00:45 +08:00 via Android 100 或者 120。 | 
|      31feiyuanqiu      2017-07-23 23:13:25 +08:00 via Android @wangxn 嗯 java 是 100,c++是 80 | 
|  |      32Tovcn      2017-07-24 01:05:36 +08:00 via Android 目前在写一个代码格式化项目,支持 C 和 C++ | 
|  |      33FrankFang128      2017-07-24 01:07:54 +08:00 你不用自动格式化工具吗? | 
|  |      34bumz      2017-07-24 06:08:31 +08:00 别人是 `void Player:SendPosition(int x, int y);` 你是 `void Player:SendPosition( int x,int y ); ` | 
|  |      35araraloren      2017-07-24 08:34:50 +08:00 @Tovcn 格式化工具不是很多吗,用 clang-format 不就好了。。 | 
|      36woshixiaohao1982      2017-07-24 08:39:58 +08:00 @lusyoe 这玩意还要 QA 格式化工具就搞定了 | 
|      37woshixiaohao1982      2017-07-24 08:40:50 +08:00 搞这些形式主义都是扯淡,,一套 lint 格式化规则才是重点 | 
|      38allenx      2017-07-24 09:58:18 +08:00 你这种写法不符合英文习惯,void init(int x, int y);,括号后面不该加空格,逗号句号等后面才应该加空格。 | 
|  |      39jianyunet      2017-07-24 10:17:30 +08:00 | 
|      40l00t      2017-07-24 10:45:09 +08:00  1 多大点事。 工作这么些年来,见过的代码也多了,我觉得所谓代码规范中,排版是最不重要的。大括号跟在后面还是另起一行,这有什么影响吗?代码规范应当是规定一些更实际的内容。比如某些功能应当怎么写,某些操作要不要做保护,某些值要不要做校验,在什么地方校验。这类约定做好了能减少大量协作沟通时间。排版只是细枝末节而已,正常人又不会一行流,无非有各自偏好罢了。 | 
|      41fds      2017-07-24 10:48:46 +08:00 用 vscode 写 ts,自动排版基本不用操心。当然还是会遇到单行过长的问题,lint 报错,需要手动换行的。 | 
|  |      42wizardoz      2017-07-24 11:07:51 +08:00 强迫症,你觉得看着别人写的代码跟你风格不统一觉得心里不舒服。但是如果你要求别人全部统一到一种代码风格,有人不认同那种风格的时候他心里更难受。 特别是多种语言混用的时候,每种语言甚至一个框架都有自己官方认可的一种编程风格。 本人喜欢在用一种框架的时候就用那种框架使用的编程风格。有时一个项目中我会用两三种。 | 
|      43hellojl      2017-07-24 11:17:14 +08:00 现在想想,百度内部的解决方案还是不错的,提交之前会有统一的代码风格检查,多一个空格都可能提不上去。现在的公司没有这些规范,代码库还超级大,里面可以说是群魔乱舞了 | 
|  |      44bluefalconjun      2017-07-24 11:34:39 +08:00 4 intent 120 其他无所谓... | 
|      45gizie      2017-07-24 11:34:47 +08:00 看 Google 代码规范。 其实你的风格也不咋地 | 
|  |      46geew      2017-07-24 11:37:19 +08:00 用 pycharm 之后 强迫症的我看到代码里有波浪线就受不了... | 
|      47blogbbs325      2017-07-24 11:40:31 +08:00 js 的话用 https://prettier.github.io/prettier/  自动帮你格式化源码,大家按自己的习惯写,git commit 的时候通过 hook 用 prettier 转换一下 | 
|  |      48qcind      2017-07-24 11:41:27 +08:00 后生仔,强迫症。 | 
|  |      49Felldeadbird      2017-07-24 11:54:30 +08:00 任何代码风格在我的编辑器格式化工具下都是浮云。 楼主应该合适使用 py 这类语言 | 
|  |      5066beta      2017-07-24 11:57:16 +08:00 扯这么多没用啊,关键要大家愿意统一一种风格,下次改动什么文件就一起格式化到新的风格 | 
|  |      52rainex      2017-07-24 13:37:04 +08:00 楼主你自己的“喜欢在函数的括号前后加一空格”,这在别人眼里何尝不是一个怪癖? 统一代码风格需要团队头儿的要求,想推行自己的观点,需要你有发言权甚至决策权力。 不过等你负责团队了,就怕你的下属又跑 v2 来发帖说强制括号前后都加空格,怪癖真恶心= = | 
|  |      53vjnjc      2017-07-24 13:41:35 +08:00 这时候不是应该根据代码附近的风格为参照么 | 
|      54kneep      2017-07-24 14:32:26 +08:00 via iPhone 你这加空格就属于异端,不知道别人怎么看你,呵呵 | 
|  |      55bombless      2017-07-24 14:37:13 +08:00 仅针对你说的在函数的括号前后加一空格这一点我倒是觉得有点新奇,通常是逗号后面有空格,没见过括号后面有的。 +1 commit 钩子里做 lint,大家全部用格式化工具格式化提交就好了 旧代码做一个巨大的 commit 把所有代码都格式化 C++代码和 Lua 代码风格不一样是正常的,一样就奇葩了 | 
|  |      56dreamwar      2017-07-24 14:37:59 +08:00 感觉还是看学的时候接触的代码都什么风格... 很多人都是被教的人或者带的人给带跑偏了 | 
|  |      57marvinwilliam      2017-07-24 15:04:41 +08:00 editorconfig    让编辑器自己去玩吧.... | 
|  |      58sirqiao      2017-07-24 15:24:25 +08:00 可以考虑实现一个 parser,然后再按自己的习惯把 ast 吐成自己习惯的格式。。。 | 
|  |      59yanxijian      2017-07-24 16:18:48 +08:00 @Technetiumer +1,括号两边有空格感觉好奇怪 | 
|      60sampeng      2017-07-24 17:02:46 +08:00 代码风格。。谁有拳头,谁说了算。 反正我拿到任何文件都是 ide 自动 format 文件格式。。。 | 
|      61rocksolid      2017-07-24 17:07:32 +08:00 团队能遵守约定的那就统一,不行的话就自动 | 
|  |      62darklowly      2017-07-24 19:07:51 +08:00 楼主还是太死板。 1 代码风格是团队的。 2 不要坚持一种代码风格,在不同语言,不同项目下,要遵守该语言,该项目的风格。 例如 C 语言函数声明有 4 种: c: void fuck_you(void) c: void fuckYou(void) c: void 换行 fuck_you(void) c: void 换行 fuckYou(void) 这是同一种语言下,不同项目的约定。 同样的,不同语言,也有不同的社区约定。 | 
|  |      63TIGERB      2017-07-24 19:37:37 +08:00 还是 GO 牛逼,哈哈,语言级别直接可以统一风格,哈哈~ | 
|      66Cbdy      2017-07-24 20:40:21 +08:00 via Android 我写 c 的时候用 kr 风格,但是空格四格缩进 java、pyhon 没啥争议,随大流 js 模块名连字符,变量小驼峰,类大驼峰,不加分号 当然,团队协作的时候会加 lint | 
|      67quinoa42      2017-07-25 09:11:18 +08:00 我现在写 C/C#也把{写在同一行了😂 | 
|  |      68iRiven      2017-07-25 11:22:14 +08:00 via Android 真羡慕你们能看到空格的,我已经块看不见空格了 好方 | 
|  |      69caniuse      2017-07-25 12:11:14 +08:00 喜欢 go 的代码风格,写 php c js 全部用 go 代码风格 | 
|      70zh5e      2017-07-25 13:23:11 +08:00 用 astyle 工具,相同参数来统一编码风格 - - | 
|      71leo937549163      2017-07-25 14:22:37 +08:00 via Android js...@flow | 
|  |      72429463267      2018-09-22 18:14:04 +08:00 |