1.摘要
最近写了不少代码,review了不少代码,也做了不少重构,总之是对着烂代码事情了几周。为了抒发一下这几周里好屡次达到瓦解边沿的情绪,我抉择写一篇文章谈一谈烂代码的那些事。 这里是上篇,谈一谈烂代码发生的原因和现象。
2.写烂代码很容易
刚入措施员这行的时候常常听到一个概念:你要把精神放在ABCD(需求文档/成果设计/架构设计/领略道理)上,写代码只是把想法翻译成编程语言罢了,是一个没什么技能含量的工作。
其时的我在听到这种概念时会有一种近似于高冷的不屑:你们就是一群傻X,基础不懂代码质量的重要性,这么下去早晚有一天会踩坑,呸。
但是几个月之后,他们好像也没怎么踩坑。而跟着编程技能一直在不绝成长,带来了更多的我以前认为是傻X的人插手到措施员这个行业中来。
语言越来越高级、封装越来越完善,各类技能都在辅佐措施员提跨越产代码的效率,依靠层层封装,措施员真的不需要相识一丁点技能细节,只要把需求里的内容逐行翻译出来就可以了。
许多措施员不知道要怎么组织代码、怎么晋升运行效率、底层是基于什么道理,他们写出来的是在我心目中烂成一坨翔一样的代码。
可是那一坨翔一样代码竟然他妈的能正常事情。
纵然我认为他们写的代码是坨翔,可是从不打仗代码的人的视角来看(好比说你的boss),软件开发,代码编译过了,测试过了,上线运行了一个月都没出问题,你还想要奢求什么?
所以,纵然不情愿,也必需认可,时至今天,写代码这件事自己没有那么难了。
3.烂代码终究是烂代码
可是偶然有那么屡次,写烂代码的人去职了之后,工作好像又变得纷歧样了。
想要修改成果时却发明措施里充斥着各类无法领略的逻辑、改完之后莫名其妙的bug一个接一个,接办这个项目标人开始漫无目标的加班,而且原本一个挺乐观开朗的人徐徐的开始喜欢问候别人祖宗了。
我总结了几类常常被艹祖宗的烂代码:
3.1.意义不明
本领差的措施员容易写出意义不明的代码,他们不知道本身毕竟在做什么.
就像这样:
public void save() { for(int i=0;i<100;i++) { //防备生存失败,重试100次 document.save(); } }
对付这类措施员,我一般发起他们转行。
3.2.不说人话
不说人话是新手最常常呈现的问题,直接的表示就是写了一段很简朴的代码,其他人却看不懂。
好比下面这段:
public boolean getUrl(Long id) { UserProfile up = us.getUser(ms.get(id).getMessage().aid); if (up == null) { return false; } if (up.type == 4 || ((up.id >> 2) & 1) == 1) { return false; } if(Util.getUrl(up.description)) { return true; } else { return false; } }
许多措施员喜欢简朴的对象:简朴的函数名、简朴的变量名、代码里翻来覆去只用那么几个单词定名;能缩写就缩写、能省略就省略、能归并就归并。这类人写出来的代码里充斥着各类g/s/gos/of/mss之类的全世界没人懂的缩写,可能一长串不知道在做什么的持续挪用。
尚有许多措施员喜欢巨大,各类宏界说、位运算之类写的口不择言,生怕代码让别人一下子看懂了会显得本身程度不足。
简朴的说,他们的代码是写给呆板的,不是给人看的。
3.3.不得当的组织
不得当的组织是高级一些的烂代码,措施员在写过一些代码之后,有了根基的代码气势气魄,可是对付局限大一些的工程的掌控本领不足,不知道代码应该如何解耦、分层和组织。
这种反模式的现象是常常会看到一段代码在工程里拷来拷去;某个文件里放了一大坨堆砌起来的代码;一个函数堆了几百上千行;可能一个简朴的成果七拐八绕的调了几十个函数,在某个难以发明的猥琐的小角落里冷静的挪用了某些要害逻辑。
这类代码大多巨大度高,难以修改,常常一改就崩;而另一方面,缔造了这些代码的人倾向于修改代码,害怕缔造代码,他们甘愿让原本巨大的代码一步步变得更巨大,也不肯意从头组织代码。当你面临一个几千行的类,问为什么不把某某逻辑提取出来的时候,他们会说:
“可是,那样就多了一个类了呀。”
3.4.假设和缺少抽象
相对付前面的例子,假设这种反模式呈现的场景更频繁,格式更多,始作俑者也更难以本身意识到问题。好比:
public String loadString() { File file = new File("c:/config.txt"); // read something }