免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: JohnBull
打印 上一主题 下一主题

关于代码的适度冗余 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2010-11-24 12:00 |只看该作者
我坚持冗余。  

而且我一直在冗余。每一条语句我都会去判断它的返回值,每一个buf在使用之前如果我觉得有必要我都会执行一次memset。

事实证明  代码不会因为你多写了一个memset就出现瓶颈。  

出现瓶颈往往是因为程序员采用了不恰当的技术来实现需求。

论坛徽章:
0
42 [报告]
发表于 2010-11-24 12:26 |只看该作者
本帖最后由 guoruimin 于 2010-11-24 12:42 编辑

怎么都像是为自己的不负责任开脱?
写代码要对得起程序员的称号!要对得起自己的人品!
编程是一门艺术,是科学,是来不得半点马虎的!
要是被迫写垃圾代码,我宁可改行做生意去!也不愿给这个世界添一行垃圾代码!
做人要有自己的底线,自己的操守!
看过一些开源的代码,从来没见过像这样冗余编程、防御编程的。
每一行代码都应该是有意义的,多一行少一行,就是不行!
有空可以多参参 glibc 的源码,看看人家是怎么写程序的!
http://ftp.gnu.org/gnu/glibc/

论坛徽章:
0
43 [报告]
发表于 2010-11-24 13:33 |只看该作者
怎么都像是为自己的不负责任开脱?
写代码要对得起程序员的称号!要对得起自己的人品!
编程是一门艺术, ...
guoruimin 发表于 2010-11-24 12:26


吹毛求疵

论坛徽章:
0
44 [报告]
发表于 2010-11-24 13:40 |只看该作者
本帖最后由 guoruimin 于 2010-11-24 13:42 编辑
吹毛求疵
故哈 发表于 2010-11-24 13:33

现在太缺吹毛求疵的人,我愿做一个!
真希望中国的程序员,都学会吹毛求疵!

论坛徽章:
0
45 [报告]
发表于 2010-11-24 13:58 |只看该作者
本帖最后由 guoruimin 于 2010-11-24 15:31 编辑

回复 1# JohnBull
  1. ...
  2. ...
  3. static int somefunction(void)
  4. {
  5.     ...
  6.     static char buf[XXX];
  7.     ...
  8.     ...
  9.     memset(arr, 0, sizeof(arr));
  10.     snprintf(arr, XXX, FMT, ...);
  11.     ...
  12.     ...
  13. }
  14. ...
  15. ...
复制代码
这个memset是百分之一百的冗余了,snprintf前memset,脱了裤子放屁!
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(int argc, char *argv[])
  4. {
  5.     char arr[10];

  6.     memset(arr, 0, sizeof(arr));
  7.     snprintf(arr, 10, "1234567890");
  8.     puts(arr);

  9.     memset(arr, 'x', sizeof(arr));
  10.     snprintf(arr, 10, "1234567890");
  11.     puts(arr);

  12.     snprintf(arr, 10, "12345");
  13.     puts(arr);

  14.     return 0;
  15. }
复制代码
output:
  1. 123456789
  2. 123456789
  3. 12345
复制代码
还搞什么适度冗余?完全是绝对冗余!
一个基本功不行的人,老喜欢搞些名词安慰自己!
还有少数几个人跟风,连这么明显的错误都看不出来?
代码写的太垃圾,不如回家卖红薯!

作为一个程序员,要有严谨的作风!
对使用的每一个函数都要有必要的了解。
没有严谨的作风,就练不好基本功。
基本功不行的人,往往喜欢谈什么适度冗余,防御编程!
这种技术不行,却不思进取,滥搞名词,妖言惑众,愚弄新人的人,根本就不配做程序员!

论坛徽章:
0
46 [报告]
发表于 2010-11-24 21:42 |只看该作者
我认为采取防御编程,利大于弊!

编程的目的是什么?是为了写出完美的程序?我们能做到完美吗?  
如果1个人可以做到完美的话,10个人能吗,100个人呢? 为了追求完美,项目进度怎么保证,成本又怎么控制?

论坛徽章:
0
47 [报告]
发表于 2010-11-25 09:24 |只看该作者
我认为采取防御编程,利大于弊!

编程的目的是什么?是为了写出完美的程序?我们能做到完美吗?  
如果 ...
sixinquan 发表于 2010-11-24 21:42



    防御性编程不等于代码冗余!这是2个完全不同的概念!

论坛徽章:
0
48 [报告]
发表于 2010-11-26 19:50 |只看该作者
# static int somefunction(void)
# {
#     ...
#     static char buf[XXX];
#     ...
#     ...
#     memset(arr, 0, sizeof(arr));
#     snprintf(arr, XXX, FMT, ...);
#     ...
#     ...
# }
这段代码难道没人看出来有问题吗?
我觉得编程尖锐的眼力似乎也是个能力耶。

论坛徽章:
0
49 [报告]
发表于 2010-11-29 16:21 |只看该作者
你这个例子无所谓,但并非所有的冗余代码都无伤大雅,有的甚至会混淆视听,导致后来维护的人搞不懂,会比你说的一点不多、一点不少更差。代码的可维护性和是否有冗余代码没有直接关系。

有一个Design by Contract的设计概念可以参考一下。预防性编程更多用于和底层硬件打交道、提供给第三方的库的接口等。

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
50 [报告]
发表于 2010-11-29 16:46 |只看该作者

  1.      ...
  2.      memset(arr, 0, sizeof(arr));
  3.      snprintf(arr, XXX, FMT, ...);
  4.      ...
复制代码


上下文未知的情况下,可能存在这种必要性。比如arr属于要传递出去的被格式化的二进制数据。
经常使用sprintf格式化输出,某些情况下memset更方便

  1.   memset(arr, 0, sizeof(arr));
  2.   i = sprintf(arr, "%s%d", str, id);
  3.   .....
  4.   arr[i] = sp; /* 结尾符 */
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP