作家
登录

关于烂代码的那些事——什么是好代码

作者: 来源: 2017-04-11 09:00:06 阅读 我要评论

比来部分在组织bootcamp,正好我负责培训代码质量部分,在培训课程中让大年夜家花了不少时光去评论辩论、改进、完美本身的代码。固然刚卒业的同窗对于代码质量都很居心,但最终出现出来的质量仍然没能达到“十分优良”的程度。 究其原因,主如果不懂得好的代码“应当”是什么样的。

什么是好代码

除了代码反复之外,很多热衷于保护代码质量的法度榜样员新人很轻易出现另一类反复:信息反复。

模块内高内聚与模块间低耦合是大年夜部分设计遵守的标准,经由过程合理的模块划分可以或许把复杂的功能拆分为更易于保护的更小的功能点。

2.1.好代码的定义

随便大年夜网上搜刮了一下“优雅的代码”,找到了下面如许的定义:

Bjarne Stroustrup,C++之父:

  • 逻辑应当是清楚的,bug难以隐蔽;
  • 依附起码,易于保护;
  • 缺点处理完全根据一个明白的策略;
  • 机能接近最佳化,避免代码纷乱和无原则的优化;
  • 整洁的代码只做一件事。

Grady Booch,《面向对象分析与设计》作者:

  • 整洁的代码是简单、直接的;
  • 整洁的代码,读起来像是一篇写得很好的散文;
  • 整洁的代码永远不会掩盖设计者的意图,而是具有少量的抽象和清楚的┞菲握行。

Michael Feathers,《修改代码的艺术》作者:

  • 整洁的代码看起来老是像很在乎代码质量的人写的;
  • 没有明显的须要改良的处所;
  • 代码的作者似乎推敲到了所有的工作。

看起来似乎说的都很有事理,可是实际评判的时刻却难以参考,尤其是对于新仁攀来说,若何懂得“简单的、直接的代码”或者“没有明显的须要改良的处所”?

  1. // 成员列表的长度>0并且<200  
  2. if(memberList.size() > 0 && memberList.size() < 200) {  
  3.     // 返回当前成员列表  
  4.     return memberList;  

而实践过程中,很多同窗也确切面对这种问题:对本身的代码老是处在一种心里不扎实的状况,或者是本身认为很好了,然则却被其他人认为很烂,甚至有几回我和新同窗因为代码质量的标准连续评论辩论好几天,却谁也说服不了谁:我们都保持本身对于好代码的标准才是精确的。

在经历了无数次code review之后,我认为这张图似乎总结的更好一些:

关于烂代码的那些事——什么是好代码

代码质量的评价标准某种意义上有点类似于文学作品,比如对小说的质量的评价重要来自于它的读者,由个别主不雅评价形成一个相对客不雅的评价。并不是依附字数,或者作者应用了哪些修辞手段之类的看似完全客不雅但实际没有什么意义的评价手段。

但代码和小说还有些不一样,它实际存在两个读者:计算机和法度榜样员。就像上篇文┞仿里说的,即使所有法度榜样员都看不懂这段代码,它也是可以被计算机懂得并运行的。

所以对于代码质量的定义我须要于大年夜两个维度分析:主不雅的,被仁攀类懂得的部分;还有客不雅的,在计算机里运行的状况。

既然存在主不雅部分,那么就会存在个别差别,对于同一段代码评价会因为看代码的人的程度不合而得出不一样的结论,这也是大年夜多半新人面对的问题:他们没有一个可以履行的评价标准,所以写出来的代码质量也很难进步。

有些介绍代码质量的文┞仿讲述的都是偏向或者原则,固然说的很对,然则实际指导感化不大年夜。所以在这篇文┞仿里我欲望尽可能把评价代码的标准用(我自认为)与实际程度无关的评价方法表示出来。


2.2.可读的代码

在衡量良久之后,我决定把可读性的优先级排在前面:一个法度榜样员更欲望接办一个有bug然则看的懂的工程,照样一个没bug然则看不懂的工程?如不雅是后者,可以直接关掉履┞封个网页,去做些对你来说更有意义的工作。

2.2.1.逐字翻译

在很多跟代码质量有关的书里都强调了一个不雅点:法度榜样起首是给人看的,其次才是能被机械履行,我也比较认同这个不雅点。在评价一段代码能不克不及让人看懂的时刻,我习惯让作者把这段代码逐字翻译成中文,试着构成句子,之后把中词句子读给另一小我没有看过这段代码的人听,如不雅另一小我能听懂,那么这段代码的可读性根本就合格了。

用这种断定方法的原因很简单:其他人在懂得一段代码的时刻就是这么做的。浏览代码的人会一个词一个词典浏览,揣摸这句话的意思,如不雅仅靠句子无法懂得,那么就须要接洽高低文懂得这句代码,如不雅简单的接洽高低文也懂得不了,可能还要控制更多其它部分的细节来赞助揣摸。大年夜部分情况下,懂得一句代码在做什么须要接洽的高低文越多,意味着代码的质量越差。

逐字翻译的好处是能让作者能随便马虎的发明那些只有本身知道的、没有表如今代率攀里的假设和可读性陷阱。无法大年夜字面意义上翻译出本来意思的代码大年夜多都是烂代码,比如“ms代表messageService“,或者“ms.proc()是发消息“,或者“tmp代表当前的文件”。

 1/4    1 2 3 4 下一页 尾页

  推荐阅读

  机器学习研究趋势分析:TensorFlow已超越Caffe成研究最常用框架

还有,在 InceptionNet 之前谁在评论辩论「inception」?对此也很好奇。开打趣地说,如今提交论文的主题是不是应当环绕把全卷积编码器解码器BatchNorm ResNet GAN应用于风格迁徙,用 Adam >>>详细阅读


本文标题:关于烂代码的那些事——什么是好代码

地址:http://www.17bianji.com/lsqh/34700.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)