Re: [请益] 写注解到底是不是好习惯

楼主: iincho (世界的尽头)   2018-12-30 07:41:26
※ 引述《accessdenied (存取违规)》之铭言:
: 这边怎么老是吵著小孩子头上有几根毛的问题。
: 说不用注解的,都是英雄主义作祟,自己因为自己的程式码天下最简洁易懂,这种看不清
: 自己的人还挺多的。
: 团队合作就是要注解,除非你不在乎团队!
: 你以为大家都是你肚子里的蛔虫?
: 我光是写一行code:
: key = salt + DateTime.Now.AddHours(-4).ToString(“MMdd”);
: 就会一直有人来问为什么要这样写,-4什么意思?
: 最后我加上一行注解从此耳根清净
: // 厂商要求每天清晨4点以后要更换加密金钥
: 大家讲了半天,注解只有一个缺点,就是过时美人维护。而我认为这才是真正该教育改善
: 的文化和心态:不是我写的注解,所以我没有维护的责任。
: 这才是真正的弊端,而不是倡导clean code。
这个例子举得蛮好的,很多时候我们实务上面对的问题不是单靠命名就可以解决,
因为很多问题没有逻辑性。
比如说我有个机器硬件设计可能有问题,操作100次的时候需要有一个例外操作,
这个code可能会长成:
for(int i = 1 ; i <= 2000; i++){
if(i % 100 == 0){
DoSomethingElse();
}else{
DoSomething();
}
}
这种case你要怎么命名? 这可能是个hardware bug,你确定你要在变量
里面解释这是一个hardware bug吗? 这个case跟上面举的-4基本是同一类的,
你变量再怎么命名都不会比写注解清楚。因为实务上我们会想要提醒接手
的人这个hardware bug长什么样子,如果有做类似的操作要怎么避开,
这不用注解是不大可能做得到的。如果你说可以写在commit log...
ㄛ...我们好像有客户还在用svn...
这种例子我觉得不能算是magic number,本质上不管你怎么define都解释不清楚,
用define的好处就是集中管理方便重用而已。真的要解释中间插两行issue number
简单说一下都好,在那边落落长想code怎么命名花的时间不会比较少,
何况别人读你的code的时候看注解比看code上下文猜容易太多,
这个case就算加了define命名还是需要写注解。
BTW, 程式写注解和做好变量和流程命名根本就不冲突,两者是互补而不是竞争关系。
我不知道这边为什么会有写哪一种比较好的争论,实务上两个都需要,
哪个经济用哪个。
另外我真的觉得很好奇想认真问一下,各位真的觉得那个-4在那边取什么
DailyRest之类的东西绕来绕去有比加一行注解好吗...??
先不要说是不是大砲打小鸟这问题,code没有比较好读啊。
作者: GX90160SS   2018-12-30 08:25:00
其实很多时候跟每个人所在环境不同关系很大
作者: superpai (超级白)   2018-12-30 08:39:00
你想要注解的是why , 但是-4 是what, 不大相同所以-4跟你的100都要命名,然后加上why的注解
作者: steve1012 (steve)   2018-12-30 08:57:00
一直战这种鸡毛蒜皮到底要做啥...
楼主: iincho (世界的尽头)   2018-12-30 09:07:00
我也觉得这种不冲突的问题发一篇也满奇怪的..XD
作者: hidog (.....)   2018-12-30 09:59:00
-4如果只用在一个位置,我觉得要不要定义都ok虽然我会定义,注解并行. 两者其实没冲突
作者: deray (Deray)   2018-12-30 11:56:00
100拉出来变成const EXCEPTION_INTERVAL加个subFunction check isExceptionOccurred这么简单还要我说
作者: xephon   2018-12-30 12:26:00
现在是变成理想派vs实务派大战?
作者: gmoz ( This can't do that. )   2018-12-30 12:43:00
EXCEPTION_INTERVAL 再怎样都会有一个名词多种脑补解释注解一行上去就解决了 干嘛坚持不要?
作者: localOjisan (地方大叔)   2018-12-30 14:01:00
这个100的例子跟拒绝存取的例子有不一样吗?带有特殊意义的值为什么要直接hard code?
作者: kokal (细菌)   2018-12-30 14:23:00
这例子绑定hardware,只有删除或留着,没有修改
作者: lance70176 (十三夜)   2018-12-30 14:53:00
同意你的意见一票
作者: rofellosx (鏖)   2017-01-02 09:02:00
为何不能cover所有case?
作者: fgkor123 (n(N))   2017-01-04 07:48:00
韧体常不能cover,粒度不够+内存限制+不一定有os...i/o没事不会重写,special case常常比想像的多...
作者: viper9709 (阿达)   2017-01-04 22:24:00
推这篇~解说的很好

Links booklink

Contact Us: admin [ a t ] ucptt.com