c++代码整洁之道pdf_豆瓣评分8.6!将近400页的代码整洁之道,其实重点就5个点...

程序员书库(ID:CodingBook)编译

链接:https://medium.com/better-programming/clean-code-5-essential-takeaways-2a0b17ccd05c

Bob叔有一句名言:任何一个傻瓜都能写出计算机可以理解的代码,惟有写出人类容易理解的代码,才是优秀的程序员。 Bob叔的《代码整洁之道》相信大家都不陌生,2008年出版,一直被亚马逊评为销量最高的5本技术书籍之一,作者也被亲切的成为“Bob叔”,他还是敏捷软件开发宣言(2001)的17位签署者之一。 《代码整洁之道》在美亚上已经有13000个评价,平均评分4.4,在豆瓣上也有1650个人评价,豆瓣评分8.6,看完这本书,我将本书的5个要点提炼出来: 1、编程是门手艺 架构知识软件开发中用到的借喻之一,不要创建一个完整的设计,然后从头开始创建,一步步构建成一个完整的软件,相反,我们应该从一个草图开始,不断迭代添加细节,不断修改、改进、扩展——在不同的抽象层次上构建,直到我们需要的软件构造完成。但记住,软件永远不会真正的完成。 这才是《代码整洁之道》的精髓所在,在整本书里,作者始终在传达一个理念:软件是一门艺术,就和画画一样,本质上,他认为编程是一门手艺。 4dbe9c1abff227ca751796341c77df14.png 但是,我们如何从简单的编写代码过渡到编写整洁的代码?Martin认为,我们有两大途径持续重构和测试驱动开发(TDD),它们就像硬币的两面,具有相互作用。以下是一些定义:
  • 重构就是在不改变外部行为的情况下重构现有计算机代码的过程

  • 测试驱动的开发是一个过程,在这个过程中,需求被转换成特定的测试用例,然后只编写使测试通过的功能代码。

因此,制作软件的过程可能是这样的:
  • 编写失败测试,以验证所需但未实现的功能

  • 编写一些(可能不好的)代码,使这些测试通过。

  • 增多重构代码,测试通过,使得每次开发迭代都变得更加清晰。

Martin提出一个中心思想就是整洁代码,它是在开发过程和实践中产生,而不是一次简单的创建就可以。 2、保持简短
函数的第一条规则是它们应该很小。函数的第二个规则是它们应该比小更小。
Martin的这句话就两意思: 函数体应该很短——几乎不超过20行,大多数不超过10行; 函数应该尽可能设置少的参数,最好不要有参数。 函数的简洁性使代码更容易阅读,每个函数一个抽象层级。 Martin在“类”上也提出了类似的观点,他建议使用职责来衡量,而不是代码行数,也就是说每个类应该只负责一件事,这就是所谓的单一责任原则(SRP)。 保持简短是使代码更简洁的策略,如果我们有一个大文件,里面有很多冗长、复杂的代码,我们可以把这个文件分成模块,把模块分成函数,把函数分成子函数,知道逻辑和目的变得清晰为止。 3、代码可读性
带有少量注释的整洁而有表达力的代码,要比带有大量注释的零碎而复杂的代码像样得多。
在关于注释、格式这部分内容中,Martin给出了强有力的例子,你是更愿意看到这段代码:
// Check to see if the employee is eligible for full benefits
if ((employee.flags & HOURLY_FLAG) &&
    (employee.age > 65))
还是这一段代码:
if (employee.isEligibleForFullBenefits())
条件逻辑被封装到一个方法中,因为使用的是方法而不是独立函数,所以可以使用实例变量,从而创建零参数的方法调用,该方法还使用了描述性的名称,使“整洁代码”的职责更加明确。这本书专门设了一章来介绍命名,本质上是对Tim Ottinger规则的详细说明。例如:
  • 能够清晰表达意图——诸如用int elapsedTimeInDays,而不是in days

  • 使用读得出来的名称——例如,客户而不是DtaRcrd102

  • 避免使用编码——不要用前缀m_表示"members",也不要使用匈牙利表标记法

  • 每个概念对应一个词——不要使用fetch,retrieve,get去给多个类中的同个方法命名。

4、尊重抽象

d2608e8b8765999b2dd7ef5486fc2ebd.png

根据书中说的,如果我们想要确保我们的函数只做一件事,我们需要确保每个函数中的语句都处于相同的抽象级别。Martin用以下来自FitNesse的例子来说明这一点:
public String render() throws Exception{
  StringBuffer html = new StringBuffer(");if (size > 0)
    html.append(" size="").append(size + 1).append("\"");
  html.append(">");return html.toString();
}
这里至少混合了两个抽象层次。第一个是呈现具有给定大小的hr标记的高级概念,第二个是处理实际构造标记的低级语法细节。(详细代码: https://gist.github.com/jamiebullock/e92efb17b58af81b49bc6568b0de4a4e/raw/cc1c341430b40eeb4754033a086848561c960012/no_abstraction.java ) 为了说明这一点,代码被重构得更干净,如下所示:
public String render() throws Exception{
  HtmlTag hr = new HtmlTag("hr");
  if (extraDashes > 0)
    hr.addAttribute("size", hrSize(extraDahses));
   return hr.html();
 }

private String hrSize(int height){
  int hrSize = height + 1;
  return String.format("%d", hrSize);
}
注: render()函数现在只负责构造一个hr标签;构造标记的底层细节现在由HtmlTag模块负责;大小格式被抽象为一个单独的函数 按照Martin说的: 分离抽象层次是重构最重要的功能之一,也是最难实现的功能之一。 这当然也是我们在今后的代码中需要多多考虑的问题。 5、《代码整洁之道》是关于原则和如何努力工作的一本书 我写这篇文章的目的不仅仅只是为了罗列出《代码整洁之道》里面的重点和名言,总结我们可以应用的规则,以获得整洁的代码,这样做对这本书来说是一种伤害,因为这本书本身还没有达到这种教条主义的地步。 相反,让我印象更为深刻的是,Martin在引导我们培养一种强烈的个人原则意识,并不断地说明将代码从“脏”变成“整洁”所需要付出的努力,在书里也称之为“代码感”,这需要“不断的严格运用各种代码技巧,才能达到所谓的整洁感” 写在最后 《代码整洁之道》书中的每一条规则并非都是由Bob叔提出的,他在书中多次公开承认这一点。如果说有什么不同的话,那就是这是本书如此成功的原因之一——它是对编程社区中各种智慧的提炼,并使用了实际例子让它变得更加充实。 如果本书还有什么不足的话,我觉得有一个,就是关于细节的章节和关于概念的章节配比有点不平衡,比如系统这一章只有13页,几乎只有注释那一章节的一般,我猜他这样做的原因,是想要吧这一部分的内容,留到《Clean Architecture》中去讨论。除此之外,我觉得这是最好的编程书籍之一。

●编号645,输入编号直达本文

●输入shuku获取免费电子资源

●输入m获取到文章目录

33c8d12879b31b2a4ef19f9be0c1ba99.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值