BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

专栏:代码之丑——开篇

| 作者 郑晔 关注 2 他的粉丝 发布于 2010年11月17日. 估计阅读时间: 2 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

我是一个程序员,也是一个咨询师。

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

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

if(db.Next()) {
    return true;  
} else { 
    return false; 
}

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

这些代码的存在,给了我很多机会与人分享一些编码的心得。其间,有人建议,为什么不能把你说的这些内容写下来,与更多人分享。于是,有了这个即将看到的系列:《代码之丑》,以此向《代码之美》致敬。

最后要说的是,上面那段代码可以写成这样:

return db.Next();

作者简介:

郑晔,ThoughtWorks公司咨询师,拥有多年企业级软件开发经验,热衷于探索各种程序设计语言在真实软件开发中所能发挥的威力,致力于探寻合理的软件开发方式,加入ThoughtWorks公司后,投入到敏捷开发方法的实践之中,为其他公司提供敏捷开发方法方面的咨询服务。他的blog是梦想风暴

查看原文:代码之丑(零)

【编者按】:这是InfoQ中文站新推出的专栏栏目。专栏旨在邀请国内一线的技术领域专家,定期撰写发表连载专栏,从深度和质量上为国内的技术从业者提供专业性、持续性的知识分享。这个《代码之丑》专栏计划推出系列共十篇,敬请期待后续精彩内容。也欢迎向InfoQ中文站推荐专栏作者及内容

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

其实无须大惊小怪 by Yetao Chen

更烂的代码有的是,远远可以挑战人们的想象底线...

“绝对会有人这么想:挺好的,实现功能了”,这是一个广泛存在的东西。很多做老板的人都这样想,比如我的老板,虽然在澳洲,他的公司也算相当大了,但他依然觉得,东西可以用就好了。不过,像我们这种inhouse的开发,估计也就是这样了。

你知足吧,好歹你在ThoughtWorks,起码你对于代码质量的追求是会得到认同和赞许的。

刚毕业的时候,总期望能赶紧找到工作,现在我觉得,能跟一群志同道合的人一起工作,比什么都重要。

Re: 其实无须大惊小怪 by zhang Jacob

把你说的这个问题当面跟当事人说,会更有效果。而不是在blog上公布

Re: 其实无须大惊小怪 by Yetao Chen

老赵,连大老板都是那么觉得,能用就行了,我们还能怎么样呢...

其实,有些东西,关键还是看的一个态度问题。当然,我没有想在这抱怨什么,只不过就是话赶话说到这了,顺带提一句。

Re: 其实无须大惊小怪 by Yetao Chen

不好意思,不好意思,看错人名了,刚睡醒,还迷糊着呢,哈哈哈

这是一个需要积累的过程 by You Mengz

这是一个好的建议,但是对于每个人都有自己不同的风格,当然如果都能写出很美的代码那固然是好的!但是我想这是需要实践和积累的一个过程!我觉得这个系列还是可以的!只是可以帮助我们也看到我们自己注意不到自己写的烂代码!

Re: 这是一个需要积累的过程 by You Mengz

至少可以帮助我们也看到我们自己注意不到自己写的烂代码!
写错了“至少”和“只是”的感觉完全不一样啊!哈哈!

这个代码不算丑 by Liu Tiger

从工程学的角度看,这个代码一点也不算丑,逻辑清楚,没有隐患,易读,一点点额外开销几乎可以忽略不计,最多只能算是不够精炼而已。

Re: 其实无须大惊小怪 by Chen Kurt

同感,可以想想你用的手机里面的代码,超乱的代码你还能Daily Use。

我觉得写出来,还是很有必要的 by 张 成

可以帮助很多新人,提高代码质量。

请各位兄台修改一下自己的姓名 by 霍 泰稳

楼上的各位兄台,如果方便,请在“首选项”里将自己的姓名更新一下,像我一样更新为真实姓名“霍泰稳”。我们的目的是希望为InfoQ的读者营造一个真实、纯净的交流环境;另外真实姓名的读者可以优先参加InfoQ定期举办的如QClub这样的活动。

——InfoQ中文站总编辑 霍泰稳

没什么大不了,我有我要求。 by Ma Karl

没什么大不了,我有我要求。

没有问题吧。 by jianming guojm

这种处理解决虽然可以直接采用return的模式进行处理,但是如果是另外一个函数调用了这个代码函数,如何写取决于外部对于返回值的处理,不能一概而论这种代码就是“丑”。应根据实际情况判定。

尺有所短,寸有所长。单步调试到此处时恐怕原来的写法更好。 by 赵 中

无内容

细节决定了成败 by Tan Hyvi

继续关注你的《代码之丑》

Re: 这个代码不算丑 by 拾 叁

完全赞同

环境使然 by zjg Robin

在很多时候,不是我们看不到如何进步,而是没有“激励”来让自己进步。这种激励除了自身原因外,与公司/团队文化有很大关系。

Re: 环境使然 by Li HongQing

不能这么写 return db.Next(); 应该加上if(db!=null) { return db.Next();}

Re: 环境使然 by j liu

nice one

这是命名不规范造成的 by Yi Bo

想想看,如果那个db.Next()还有一个方法叫db.hasNext()调用API的人就不会再傻乎乎的去判断true或者false了

代码有丑的地方,但不是 if else by wu camry

db.Next() 这个调用不是很明确,也许是访问 db 中下一个元素,也许是看 db 是否有下一个元素。像上面回复的兄弟说的那样,要叫 hasNext 好些。

if else 在这里用完全没问题,很清晰明白,让人一眼知道这个函数的返回值是什么。
直接 return db.Next(); 其实不算优美,咋一看去,尤其从 diff 中看去,都不知道说什么。
只是简洁一些而已。

并不是简单的简笔画就一定比复杂的素描来得优美的。

好精简的一篇 by 章 雷

继续关注~!好精简的一篇!

代码丑了没关系,编译器会优化的,哈哈哈! by steve shen

代码丑了没关系,编译器会优化的,哈哈哈!

Re: 尺有所短,寸有所长。单步调试到此处时恐怕原来的写法更好。 by wu frank

就算单步调试时候改成原本的写法,也应该在调试完成后改回来~

Re: 代码有丑的地方,但不是 if else by 邵 毅

同意这个观点。代码的可读性比简洁更重要。毕竟代码不光要写,还有很大一部分工作在于维护。

Re: 环境使然 by 孙 留成

呵呵 有意思

这不单单是个技术问题 by qin wei

boss只给2天时间,要求完成N多功能。我告诉他,这样质量很难保证,他回复我,能用就行。

要我说,应该这么写 by kai cheng

要我说,应该这么写 return db==null?false:db.Next();

Re: 其实无须大惊小怪 by yang jun

能跟志同道合的人一起工作,是开心的事。

细节决定成败 by 李 苗

觉得写的不错,很多代码的细节我们平时都没注意到,也没有去仔细思考更优雅的代码编写方式。

让我这个写过类似代码的人情何以堪啊!!! by Kang Fuqiang

让我这个写过类似代码的人情何以堪啊!!!

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

30 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT