时间:2014-07-03 13:50:28 来源: 互联网 复制分享
随着万圣节越来越流行,我感觉有必要跟大家讨论一下一个在软件开发中非常普遍的问题:僵尸代码。几乎所有我接触过的代码库里都四散着很多小段的,甚至大片大片的被注释掉的代码。这就是僵尸代码。
//目前禁用这项功能。Jimmy在写这段代码时肯定是喝醉了。
//你可能以为这里发生了恐怖的代码凶手案…不,不,我只是把它们注释掉了…
为什么称它们为僵尸代码?你知道,僵尸不并不是真的死的。就像恐怕电影里告诉我们的,尽管僵尸看起来是死人,但它们仍有能力四处出没袭击我们。相同 的道理,僵尸代码也是处于不生不死之间…它们在伺机搞砸我们的工作。注释掉的代码还活着,它们就存在我们的代码库中。程序员在维护和重构代码时会和它们遭 遇,通常是滚动屏幕时和它们擦肩而过,或是在进行关键词搜索时和它们撞个满怀。但这些代码也确实是死的,因为它们在软件产品中并不执行。因此,这些僵尸就 应该被烧掉,立刻。
僵尸代码不死之躯
我认为,有两个原因导致了僵尸代码的肆虐:懒和害怕风险。懒程序员对代码有收藏癖。他们缺乏确信的勇气和清楚的认识去删除无用的代码,于是他们就把 它们隐藏在注释里,期望有朝一日它们能复活来再次祸害人。代码需要经常的、有计划的删除,因为优秀的程序员都知道:代码就是债务。越少越好。当然,被注释掉的代码仍然是代码。
烂程序员也许会争辩说,他们注释掉这些代码是为了“万一”以后有人会需要它们。事实上,这好心反而是害了大家。这实际上说的是害怕风险,缺乏对版本 控制系统作用的信任。有版本控制系统在,删除的代码永远不会真正的死掉。它们被埋到棺材里但却活着。所以,注释代码的方法没有多大实际效用。
对于程序来说,注释掉的代码跟删掉的代码一样,不起任何作用。让代码半死不活,以僵尸的形态存在,造成技术债务,最终会让你的团队受害。要果断,删掉它们。
僵尸代码降低信噪比
当写程序时,我们一定要努力使代码里有效信息的比率越高越好。这有助于人们理解程序,更快的阅读代码,防止我们因为误解而写出有问题的代码。僵尸代 码直接的对抗代码的可理解性。它拖延我们阅读和维护代码的速度,因为它使我们在屏幕上看到更少的有效代码。它们就是视觉噪音,干扰人们的正常阅读。处于某 些原因,有些程序员会接受这种妥协的做法,可是在现实中,谁会接受这种乱糟糟的画面。想象一下,如果纽约时报看起来像这个样子:
如何阅读这断断续续的文字?噪音的增加就是对可理解性的损害。对这些被注释掉的部分,尽管它们毫不相干,甚至会误导,但你却无法对它们视而不见。有 人会说,这不是最终发布的产品,这些代码存在于开发过程中,拿它们跟发布的产品做对比,这就像拿苹果比桔子。但是请记住,被写出的每行代码平均都要被阅读10次。没错,你的代码的阅读人数没有纽约时报多,但是,你拥有的是一个最重要的忠实的阅读群体。就是我们。 Knuth对此关切进行了精辟的总结:
“编程是一种一个人告诉另一个人他想让计算机做什么的艺术。” Donald Knuth
而僵尸代码让你讲话讲不清楚。一个程序员需要去阅读被注释掉的代码吗?
僵尸代码造成歧义妨碍调试
注释掉的代码会带来歧义,人们会怀疑这些代码是否该注释掉。试想一下,你是一个来维护程序的程序员,突然看到了一片注释掉的代码,而程序就在这附近 出了问题。这个程序员的任务会变得更棘手。他需要阅读和理解这些注释掉的代码,了解注释它们带来的影响。是因为测试而注释这些代码但忘了恢复吗?也许注释 这些代码的人可以提供帮助,但他是谁?调查行动开始。多余的歧义会消耗你的时间,增加你的思考负担——本来可以是一次轻松的调试过程。
僵尸代码影响关键词搜索
在大型程序库中,grep/find命令将会是你锁定某些特定的代码片段的雷达。然而,如果程序库里到处散布着僵尸代码,很有可能你捕捉到的目标都是被注释掉的。这是干扰。浪费时间。
僵尸代码影响代码重构
反省(重构)能修复我们的灵魂。我们应该以小孩scout的做事原则为荣,永远把代码收拾得比你想象的要整洁。然而,当一个类或方法包含有大量的僵尸代码时,事情就不好处理了。如果重构这段程序,我是否还要参考注释掉的代码?它们近期将会被重新使用吗?它会影响我的新版的实现吗?这些问题对于维护的程序员来说本该不需要回答的。
此外,集成重构工具根本不会考虑这些注释掉的代码。因此,当方法,变量,类被重命名或修饰符改变时,这些注释掉的代码就不会同步做修改。当你再想把注释掉的代码复活时,它们很可能根本不能编译。
有例外吗?
没有。很明确。有人会说“我现在注释它们是因为我过会儿就要恢复它们。”OK,假设你是个家庭妇男,你走到起居室,看到:
想想你内心的对话。这是个漂亮的房子,但这个东西又丑且怪异。我想开灯,但怎么会有胶带?如果我撕掉胶带去开灯,会发生什么事情?你很可能最终决定 找贴胶带的人。“哦,我想打开吊扇,但它启动时来回摇摆,掉了下来,我想修理它….”当然,这是应该的。而在你没修好它之前,胶带一直贴在开关上。我们当 然不该让这些只修了一半的东西存在屋内。同样,我们也不接受这样的代码。
说的更明白些,任何被注释掉的代码都是僵尸代码,都应该被删掉。不管有多少。不管是在发布的产品中还是在开发环境中。僵尸代码有时会在生死之间摇 摆。如果代码被注释掉,这很有可能有东西没有完成。经常是配置需要来回切换或逻辑分支左右摇摆。注释代码可能会做实验性的来回切换,删除这些代码,建一个 记事贴,记录下需要做的事情。在记事贴中记下哪次提交版本时删除了这些代码。或者,新建一个版本分支专门做这事,合并时删除它们。这样,维护工作就不会受 到干扰。
心里的核对表
如果你打算要注释一段代码,请先问问自己:
如果有可能的话,什么时候会取消注释?
是否能删掉它,如果日后有需要,从版本控制系统里找回?
对这些未完成的、有可能会回滚的代码,能否用版本分支来处理?
这种需要来回切换注释的功能可否通过配置实现?
重构时也需要重构这些注释掉的代码吗?
让我们开启第一次年度万圣节僵尸代码大清剿。
由于特殊原因,不想与对方进行互换,如何处理? 解决方案: 在互换列表里面选中需要取消互换链接的那行,右击选择,我要下链(输入你的下链理由)点确认即可。 确认后,这条记录将在您的互换...【详细】
说明:在没有写明下链理由情况下,直接删除网站链。这种就属于恶意下链。 解决方案:您可以直接互换列表里面选择对方链接一行,右击重新检测一下,如还是提示异常,则人工打开对方网站...【详细】
网站列表-数据更新说明 1:系统会每隔24小时对网站所有SEO数据进行自动更新(登陆客户端的情况下)例如:今天早上添加的网站并更新过,到了明天早上八点登陆客户端,系统会自动更新,如果...【详细】
网站列表删除网站说明: 一:删除网站后所有网站之前的数据会保留在服务器(如:换链记录,准时率,被投诉,超时次数等等),再次添加,这些属性会随着网站添加至新的会员属性中。 二:如有误删除...【详细】
如何暂停网站互换链接? 选择相应的网站,点击“修改”,选择“暂停网站”即可。暂停网站后,该网站不会在互换大厅显示。...【详细】
使用教程第一步登陆“换链神器”进入“网站列表”点击“添加网站”并设置换链匹配条件,添加完网站后系统会在十分钟后自动更新所添加网站SEO数...【详细】
向安卓用户的新年献礼!享受与众不同的刷机体验! 2013新年伊始,甜椒刷机助手为答谢广大安卓手机用户对甜椒的支持与信赖,倾情推了甜椒刷机助手V3...【详细】
微软刚刚放出新近发布的Project Professional 2013的60天试用下载链接。Project 2013专业版将仅适用于Windows 7和Windows 8,并可在32位和64位系统...【详细】
之前小编给大家介绍的视频编辑制作软件《拍大师》,小编亲测了该软件的“拍游戏”“拍我秀秀”和“拍照截图”功能...【详细】
末日过后,2013惊喜连连,PC版拍大师2.0变速版刚刚推出不久,移动版拍大师即闪亮登场,拉开爱拍移动的序幕。本次拍大师移动版先推出了Android系统的安卓...【详细】
玩刷机,闹元宵。在一年一度的元宵节到来之际,甜椒发布V3.0.5元宵版,与机友们一起闹元宵。凡使用甜椒刷机助手的用户,每天都能参加幸运大转盘活动,每天...【详细】
末日会不会来?玛雅预言会不会真的发生?最近我们都有太多关于末日的想法啦!尽管我们没办法确切的知道到底有没有世界末日,但大多数网友们还是认为不管明天...【详细】
无锡永中软件有限公司日前发布了全新的永中Office 2013 个人版,新版本以全新的界面体现清新时尚,即时菜单、智能图表、功能区的压缩和助记符的提供...【详细】
之前小编给大家介绍了拍大师这款最简单的视频制作编辑软件,还教大家怎么使用有拍大师的拍游戏视频功能,相信大家看了之后都会使用拍大师的录游戏功...【详细】
近日,微软在其官方博客上发布消息表示他们已经在Office 2013中加入了对国际用户以及多种语言的支持,其中新加入的语言有位于亚洲地区的印度语、马来...【详细】
《我是歌手》好声音在路上,拍大师圆你歌手梦!由浙江卫视强力打造的《中国好声音》热度仍没褪去,又一个叫做《我是歌手》的音乐对决综艺秀火了起来,各...【详细】
2012年,百度曾面向泰国市场推出了电脑优化工具Baidu PC Faster,现在,百度终于亮出了大招,正式推出了百度杀毒软件2013(Baidu Antivirus 2013),不过...【详细】
对于WPS Office系列的办公软件,相信大家都不会陌生,它一直以免费且高效收到广大用户喜爱。最新版WPS Office 2012全新的界面选择、全新的首页模板、...【详细】
今日是甜椒刷机助手为刷机界打开新纪元的一天,中文触摸recovery模式发布。中文触摸recovery改变了刷机时候的技术编程显示方式,通过图示的方式显示...【详细】
龙腾摆尾辞旧岁,金蛇起舞闹新春!OneKey一键还原提前携礼给各位朋友拜年,恭祝各位友人在新的一年里:心想事成,万事如意,阖家幸福! 官方下载地址:Onek...【详细】