公司的 coding style 可以很俗,但若有标准可循也就没什么好说的了。
原 po 自己也说,
Apache 的 code 看起来就像一个人写的
(虽然 Apache 是一个组织,旗下有一堆 project 包括 OpenOffice)。
虽然我也认为应该采用 guard,
但公司透过规定你的 coding style 来达成这个条件也无可厚非。
当你不是 projet owner 的时候,就只能 follow 别人定的规则,遵守 convention 。
每个人都有自己的想法,加上软件的学问常常翻新,更别说还有各门各派,
所以改变别人想法、期待别人“进步” (进步与否是主观的) 不能根本地解决你的问题。
之前公司因为每位工程师身上都各自背案子,
但工程师间对于 code 的要求差异很大,
我索性把 codebase clone 好几份放在 host,
每位工程师都是自己负责的案子的 project owner,
仍然保留了除了他和他认可的人以外,上 code 都要经过 review 这个机制,
但是每个 project 的 reviewer 不同,
而且定标准的自由可以留给各个 project owner。
彼此依旧可以看到别人的 project 有上什么 commit,不妨碍交流。
因此,我们虽然可能同是做 AOSP 的 project,
但负责不同 case 或用在不同 device 上,
就是不同的 project,
codebase 是分开的,
host 上因此有上千个 repo。
虽然会有浪费 host 空间的缺点,
但是这样更有像 GitHub 一样 social coding 的感觉,
也可以做到封装的概念,大家都管好自己的 project 就好,
要是去管别人的 project 的 coding style,那就是捞过界。
※ 引述《guest2008 (guest)》之铭言:
: 这个我看起来 A 跟 B 根本没什么不同,但 B 确实比较糟糕。
: 因为都是 X条件触发,处理 X条件,再继续往下做。
: 但你是 X不成立,就返回。这个 !X 不是好方法,实际上对系统架构没帮助。
: 你要让系统结构很维护,避免那么多{}层出现,
: 框到到底那个 } 是对应那个 { 都不知道了,应该这样写:
: if(
: fun_A() == true
: && fun_B == true
: && fun_C == true
: && .......
: )
: {
: 做某件事
: }
我所知的语言,function 的 return 值可以满足 condition 就不会再做多余的比较。
例如
if (funcA())
不会写成
if (funcA() == true)
就算是要正规化也会这样写 (但没赋值给变量也不需要)
if (!!funcA())
: function fun_A()
: {
: if(....) return(false);
: return(true);
: }
return 是 statement,后面接的括号是给 expression 用的。
但是 (true) 不就是 true 吗?
: 下略,自己补上 fun_B()..fun_C()。
: 这样写有啥好处??
: (1) 最大好处就是太多层后,真的不知道那个 } 是对应那个 {
: 也就是你一直在数空格数到底空对了吗?
: (2) 除错超快,注意我是直接每个判别直接写一行,
: 你写的落落长后,除非你是天下奇杷,脑袋超清楚,
: 要不然肯定会错啦~~这个地方我除错的速度绝对比你快。
: 我直接一行一行 // && fun_C() == true
: 就找出问题了。
: 甚至未来你某个条件不想再用就像上面一样 mark 掉就好了。
: 以上给参考,你自己去评估三种写法哪种最好。
: 另外如果有人又要出来跟我战他要用 class 写法最好,
: 还是说这个写法糟透了,那是他家的事,我不出来应战。
: 我只是恰好路过,出来建议一下而已。