Re: [讨论] 因为空格~我离开了一间公司

楼主: guest2008 (guest)   2014-09-07 03:16:25
※ 引述《workworkwork (Miyada vv)》之铭言:
: 这是我"前"公司的经验了
: 一开始以为公司内有严格的coding style规定是件好事
: 我也赞成公司要有一致的coding style
: (像我以前看过apache的C code
: 全部CODE都像同一人写出来的一样)
: 而公司内也会有人code review你的部份
: 一切听起来都很完美
: 一开始听到有规定coding style和code reviewer也很开心
: 但因这一切都因为公司里有一个奇怪的规定而毁了
: "code不可以用code formatter去扫"
: 我承认自己写程式常会漏勾
: 所以写完会花很多心力在检查有没有BUG 是否会被攻击 资安问题等等....
: 但在这间公司发现一个很奇怪的事情
: "有资安漏洞的CODE大家会很有耐心的教 空格没空好会被骂的狗头淋头"
: 搞到最后一段程式写完我只知道检查空格....
: 最后的最后我决定离职的原因是出在reviewer
: 和reviewer的code观念差太多 跟本无法共事
: 例如:
: 1.
: 有时为了避免太多层出现===>
: if(a)
: {
: //do a things
: if(b)
: {
: //do b things
: if(c)
: {
: //do c things
: }
: }
: }
: 会改成====>
: if(!a)
: {
: return ;
: }
: //do a things
: if(!b)
: {
: return ;
: }
: //do b things
: if(!c)
: {
: return ;
: }
: //do c things
: 但因为这写法code reviewer没看过
: 她直接在辨公室里开飙
这个我看起来 A 跟 B 根本没什么不同,但 B 确实比较糟糕。
因为都是 X条件触发,处理 X条件,再继续往下做。
但你是 X不成立,就返回。这个 !X 不是好方法,实际上对系统架构没帮助。
你要让系统结构很维护,避免那么多{}层出现,
框到到底那个 } 是对应那个 { 都不知道了,应该这样写:
if(
fun_A() == true
&& fun_B == true
&& fun_C == true
&& .......
)
{
做某件事
}
function fun_A()
{
if(....) return(false);
return(true);
}
下略,自己补上 fun_B()..fun_C()。
这样写有啥好处??
(1) 最大好处就是太多层后,真的不知道那个 } 是对应那个 {
也就是你一直在数空格数到底空对了吗?
(2) 除错超快,注意我是直接每个判别直接写一行,
你写的落落长后,除非你是天下奇杷,脑袋超清楚,
要不然肯定会错啦~~这个地方我除错的速度绝对比你快。
我直接一行一行 // && fun_C() == true
就找出问题了。
甚至未来你某个条件不想再用就像上面一样 mark 掉就好了。
以上给参考,你自己去评估三种写法哪种最好。
另外如果有人又要出来跟我战他要用 class 写法最好,
还是说这个写法糟透了,那是他家的事,我不出来应战。
我只是恰好路过,出来建议一下而已。
作者: cc1plus (废柴联盟盟主)   2014-09-07 03:32:00
好的 ide 本来就可以看出有多少层.....
楼主: guest2008 (guest)   2014-09-07 04:13:00
我都是以后续除错跟修改看这件事. IDE可看出..但他无法辨识人的逻辑是否对, 未来要删除某条件时,人可能会删错但IDE依然只能辨识相对应的{}数目对,但删错位置他不知
作者: cha122977 (CHA)   2014-09-07 04:15:00
1)根本不该弄错... 2)if层数增加也是落落长啊...说!X不是好方法也太武断 用来表示前题条件可是相当有用
楼主: guest2008 (guest)   2014-09-07 04:21:00
1)会弄错是因为他说每个条件成立后会"先做某事"再继续如果纯判断不会做某事..后续要删某条件,确实不会弄错阿要先做某事..一堆落落长的 } 真的会删错.!X 是指整个框架而言, 不是指对 X 做反运算而言但他写 if(!X)return; 表示他段程式码是在某函数内..所以 !X 真的是比较不好的写法. delphi 语言他的写法是最前面写 result := false, 如果全通过在 result:=true这里重点是要讨论架构..不是要讨论 !X 好不好我指的架构是这三种写法的比较,不是指我推文补充的事delphi的写法 VS !X 那是题外话了.跟本文比较无关
作者: StubbornLin (Victor)   2014-09-07 05:58:00
guard condition 写法很常见 没有比较糟要 debug 跑 debugger 就好了
作者: robler (章鱼丸)   2014-09-07 08:40:00
你太武断了吧 这样写法没有比较糟 你的写法才会让人看不懂
作者: jasonwoo (Syler)   2014-09-07 09:52:00
楼主的写法比第一种还复杂且不好理解...
作者: StubbornLin (Victor)   2014-09-07 10:53:00
short circuit 其实有些陷井 有时不小处处理会出问题 与其用 short circuit...我宁可用 guard condition有踩过地雷就知道了就跟 the one true brace style 一样而且 short circuit 还有一个问题要判断哪几个 expression 会被 evalute并没有 guard condition 这么直观特别是 && || 混搭的时候 得想一下
楼主: guest2008 (guest)   2014-09-07 11:17:00
我很讨厌 条件||条件, 这部分程式码超容易出错,这除非是 sql 的code没得改,只能用()去降低出错要不然遇到 && || 混杂.."个人习惯" || 会特别处理再拿回来跟 && 运算
作者: CRPKT (crpkt)   2014-09-07 11:58:00
那叫做 guard condition/clause
作者: ACMANIAC (請肥宅救救肥宅)   2014-09-07 14:15:00
我会更不想看到你这种写法...
作者: askacis (ASKA)   2014-09-07 20:43:00
没有2可以按好难过~
作者: saxontai (黑暗,点缀孤零零的星)   2014-09-09 12:44:00
你根本完全没搞懂第二种写法的由来,跟 { } 视觉上对不对得上根本一点_关系都没有
作者: godspeedlee (妳,我可以)   2014-09-09 19:00:00
老实说这点我支持原po,巢状太深很难读
作者: farlandx (Farland)   2014-09-12 15:06:00
2不是每个环境都会有好的IDE协助,巢状太深很痛苦

Links booklink

Contact Us: admin [ a t ] ucptt.com