• 2010-10-21

    代码之丑(零)

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/dreamhead-logs/80223223.html

    看到下面这段代码,你会做何感想?
      if(db.Next()) {
        return true;   
      } else {
        return false;
      }

    有的人会想,怎么写得这么笨啊!但是,请放心,绝对会有人这么想,挺好的,实现功能了。这并非我臆造出的代码,而是从一个真实的codebase上找到。

    成为一个咨询师之后,我有机会在不同的项目中穿梭。同客户合作的过程中,我经常干的一件事是:code diff。也就是用源码管理工具的diff功能把当天全部修改拿出来,从编码的角度来分析代码写得怎么样。

    因为这个工作,我看到了许多不同人编写的代码,我的编码底线不断受到挑战。许多东西,我以为是常识,但实际上不为许多人所知,比如上面那段代码。

    我把在看到的问题总结成一个session,与客户的程序员分享。结束之后,有人建议,为什么不能把这些问题写下来,与更多人分享。于是,我产生了写下《代码之丑》念头,以此向《代码之美 》致敬。

    最后要说的是,开始那段代码可以写成这样:
      return db.Next();


    本文已经首发于InfoQ中文站 ,版权所有,原文为《专栏:代码之丑——开篇 》,如需转载,请务必附带本声明,谢谢。
    InfoQ中文站 是一个面向中高端技术人员的在线独立社区,为Java、.NET、Ruby、SOA、敏捷、架构等领域提供及时而有深度的资讯、高端技术大会如QCon 、免费迷你书下载如《架构师 》等。

    分享到:

    历史上的今天:

    引用地址:

    评论

  • 多包容一下嘛,包容性增长。
    if (够包容){
    return (够包容);
    }else{
    return (不够包容);
    }

    这样可以吗?:)
  • 这种级别的代码,编译器会自动优化的。
  • if(db.Next()) {
    return true;
    }
    return false;

    亦可,lz写的格式要考虑返回数据的类型....db.next是对象还是bool什么的,这个至少要说明一下原始设计...
  • 我想你最后其实不需要特别解释一下代码的J点。。。
  • 有些时候这样做是为了调试方便,比如方便单步跟踪!代码的美丑不应该以行数多少来评判,代码写的简单是指逻辑上的简单。另外一方面还要兼顾到可读性和方便维护!
  • 单独来看这段代码或许真的不太好,但往往我们不能孤立地看一段代码,都是有上下文的。
  • 这个能说明什么?
    我觉得那你要看包含
    if(db.Next()) {
    return true;
    } else {
    return false;
    }
    这段代码的命名是什么
    返回值是什么
    如果命名是NextIsNotNull
    返回值是一个bool这么设计有错误么?
    别把这种事情叫做代码之丑
    显得的好没有水平啊
  • return db.Next(); 不够清晰

    hasData = db.Next();
    return hasData;
    回复神仙说:
    显然,你可以把函数命名成hasData()。
    2010-10-27 17:46:06
  • 我还看过一个Test Case名字:
    public void Verifythattheadminpagecanbeopenedsuccessfullybytheadminuserandcorrespondingcontrolsarefilledwiththecorrectvalue_TC02{
    ......
    }
    然后剩下的100多个Testcase全是这样的名字。。。
  • 看这变量的命名是db,很可能是数据库操作,最有可能是一个resultset,如果是,这里的next()操作除了返回是否还有数据没有处理的判断外,还有可能将指针指向下一个数据,这里的if在将来可能有用处的。
  • 原来那样写不一定不好,比如要加入调试的代码,或要修改一些逻辑,甚至只是加注释,在原来的基础上更好修改,比如:

    if(db.Next()) {
    ... Debug info about db ...
    return true;
    } else {
    return false;
    }
  • 我可以向你保证,我看到过无数次这样的代码。
    很多时候,不是他们不知道,而是他们不关心。这个是最大的问题...
  • 代码清晰也是很重要的,在某些情况下,你给的这段代码里面可能有隐式的类型转换,原来的代码不一定完全不好。她吧转换在内部完成了。
  • 这个算不:
    if (!(something=='xx')){
    ...
    }
    回复Eric说:
    也算是一种丑陋。欢迎提供更多的素材。
    2010-10-22 06:59:48