早就想看下《clean code》了,不知为啥总是没看,突然发现该看看了。其实很多原则或多或少都听说过实践过。再来看一下可能感觉更好吧。
窃以为这本书第一章算是整洁之道,后面算是整洁之术吧。
一、 代码整洁之道
代码永存,没有什么先进的代码工具能代替程序员。模糊的需求和精确的代码之间有个必须程序员才能弥补的鸿沟。
勒布朗法则:later equals never. 法则好简单,为什么做起来那么难呢??有的
洁癖真的很吸引人。
花时间保持代码整洁不仅关系效率而且关系生存。破窗理论,破烂的代码是毁灭的第一步。
当老系统繁重的无法快速满足新变化时,重启新团队重新设计老系统,并与老系统并行运行的例子还是有一定的体会的,此事正好发生在我待过的项目。
写了不整洁的代码而因此承受惨重代价,这是程序员
自作自受,跟繁琐的需求,无止的变化,难以接受的进度,sx的经理都有关系,但还是要说,自作自受。
写混乱的代码就是最快的方式? 不是,那是因为你根本写不出漂亮的代码。漂亮的代码才是最快的。你有
洁癖吗?艺术家的艺术。
整洁的代码只做好一件事。尽可能的简单(如命令查询分离原则),尽可能的少依赖。
简单的代码,依其重要顺序:
1. 能通过所有测试
2.
没有重复代码
3. 体现系统中的全部设计理念
4. 包括尽量少的实体,比如类,方法等。
消除重复和提高表达力(命名)能在代码整洁方面获益良多。
不要重复代码,只做一件事,表达力,小规模抽象。概括了整洁代码的全部内容。
写新代码时我们一直在读旧代码。读写话费时间比例超过10:1。编写代码的难度,取决于读周边代码的难度。要想写的容易,先让代码易读吧。
美国童子军军规:让营地比你来时更干净。代码的每次check out, check in也是如此。
二、 代码整洁之术
2.1命名
1.名副其实,见名知意。
1) 名字不要怕长,表达清楚更关键。
2) 魔鬼数字用有意义的常量
3) If里的条件能用一个有明确含义的功能方法表达更好。
到处需要命名
如:原始代码,
重构后代码1:
再次重构后2:
2.做有意义的区分
比如有两个类,ProductInfo, ProductData,名称虽然不同,但意义却无区别,就像a, an, the一样。这种情况在项目中也时常发生,至少我经历过。。。
3.使用读得出来的名称
使用正确的
准确的英文表达。花些时间在命名上是非常值得的。不然,痛苦在后面...
单字母名称(如i,j)只应出现在短方法的本地变量。名称长度应与其作用域大小想对应。
若变量或常量多次出现在代码中,应赋予其便于搜索的名称。比如,
原始代码:
重构后后:
4.类名
类名和对象名都应该是
名词或名词短语,如Customer, Account,AddressParser。类名不应该是动词。
5.方法名
方法名应该是
动词或动词短语,如postPayment, save等。
6.每个概念对应同一个词,一致的风格
每个类中采用一致的命名风格,如get***,set***,一词一意,以免概念模糊。可以采用通用的专业性的计算机术语,或问题领域的名称
7.添加有意义的语境
比如添加前缀,lastName, firstName在表示的是地址的时候就可以用addrLastName,addrFirstName.但也不要添加无意义的前缀。
命名一定要精确。
2.2 函数
1.函数的第一规则是短小,第二规则是还要更短小。
If,else,while等代码块中的代码应该只有一行,大抵应该是一个函数调用,一个有较具说明性的名称的函数调用。当然有些极端,理念就是不做多余的事,做同一个抽象层次的事。
2.只做一件事,做好一件事
做的事跟函数名称对应。一个函数做的事情越少,功能越集中,越好命名。
3.每个函数一个抽象层级
函数中的每个语句,包括函数调用等应该是同一个抽象层次的。
4.函数的参数
最理想的参数个数是零,其次是一,再次是二,应该避免三个。有些公司规范是不要超过5个。当参数个数要超过2个或3个时,就要看这些参数是否需要封装成类了。
尽量使用返回值,不要使用输出参数。
5.标识参数(boolean参数)
6.使用异常代替错误返回码
我们要command-query分离,但有时候command会需要返回操作的结果,这时候可以用异常表示错误,否则表示正确,不需要再返回结果状态。
7.分隔指令和查询(command-query分离)
8.抽离try/catch块
Try/catch块搞乱了代码结构,可以把处理异常的逻辑抽离成一个函数,错误处理就是一件独立的事。
9.do not repeat yourself
重复可能是软件中一切邪恶的根源。
整洁的代码并不是一开始就能写出来,就像文章的初稿一样可能混乱不堪,但经过
反复重构慢慢就形成了整洁的代码。这个重构不能隔太久,重构在平时。同时保证测试通过。重构和测试总是分不开的。
- 大小: 19.9 KB
- 大小: 61.1 KB
- 大小: 60 KB
- 大小: 28.1 KB
- 大小: 7.1 KB
- 大小: 68.3 KB
分享到:
相关推荐
全书共分为4篇共31章,内容包括函数导读、常用函数、函数综合应用、其他功能中的函数应用。附录中还提供了Excel 2013规范与限制、Excel 2013常用快捷键、Excel函数及功能等内容,方便读者查阅。 本书适合各层次的...
这篇资料主要讲解了初中数学中关于二次函数的图像与性质的内容,特别关注了二次函数 y=ax^2 和 y=ax^2+k 的特性及其差异。学习目标包括绘制二次函数的图象,理解不同函数间的联系与区别,以及掌握其基本性质,并能够...
本篇将详细解读MTK软件构架、编译过程、开发目录结构、开发工具的使用,以及MMI(Man Machine Interface)的制作,为MTK初学者提供全面的入门指南。 1. MTK软件构架: MTK的软件构架通常基于Linux系统,包含了多个...
1. 概述:XGBoost是一种集成学习方法,通过构建一系列弱预测模型(决策树)并将它们的预测结果累加,形成一个强预测模型。它的核心在于优化了决策树的构建过程,引入了二阶泰勒展开,使得优化目标更易于求解,同时...
《美国经济评论》作为经济学界极具影响力的期刊,自1911年创刊以来,已经见证了百年经济学的发展历程。...通过阅读这些经典论文的导读,我们可以深入理解经济学的核心概念和方法,感受经济学思想的深度和广度。
目录 第0章 你一定要知道(导读) 这本书适合谁 你需要什么技术基础 你需要什么软硬件环境 让我们使用同一种语言 本书符号习惯 本书例程的取得 范例程序说明 与前版本之差异 如何联络作者 第一篇 勿在浮砂筑高台 第1...
第0章 你一定要知道(导读) 这本书适合谁 你需要什么技术基础 你需要什么软硬件环境 让我们使用同一种语言 本书符号习惯 本书例程的取得 范例程序说明 与前版本之差异 如何联络作者 第一篇 勿在浮砂筑高台 第1章 ...
第0章 你一定要知道(导读) 这本书适合谁 你需要什么技术基础 你需要什么软硬件环境 让我们使用同一种语言 本书符号习惯 本书例程的取得 范例程序说明 与前版本之差异 如何联络作者 第一篇 ...
导读 推荐阅读顺序: HTML 篇 CSS 篇 Javascript 篇 函数执行结果(考察知识点掌握) 源码相关 网络相关 设计模式 算法相关 Nodejs 篇 未解答问题(无答案) 大厂面试题 HTML 篇 CSS 篇 简述 Rem 及其转换原理 ...
- **Objectslicing与虚函数**:解释了对象切片问题及其解决方法。 - **静态成员(变量与函数)**:介绍了静态成员的特性和用法。 - **C++程序的生与死:兼谈构造函数与析构函数**:探讨了对象的生命周期管理。 - *...
学习vuex原始码整体架构,打造属于自己的状态管理库 前言 你好,我是。这是学习源码整体架构二进制整体学习...导读文章比较详细的介绍了vuex , vue源码调试方法和Vuex原理。并且详细介绍了Vuex.use安装和new Vuex.S
导读: 本文通过分析Contiki的源码,梳理Contiki的process-event模型中的event机制。 通过前文的阐述我们知道,Contiki是基于事件驱动的,有process-event模型和5大定时器机制。本文开始梳理process-event模型中的...
学习axios原始码整体架构,打造属于自己的请求库1.前言你好,我是。这是学习源码整体架构系列二进制整体学习源码整体架构系列第六篇。整体架构这句话好像有点大,姑且就算是二进制整体结构吧,主要就是学习是代码...
导读:在使用MySQL建表时,我们通常会创建一个自增字段(AUTO_INCREMENT),并以此字段作为主键。本篇文章将以问答的形式讲述关于自增id的一切。 注: 本文所讲的都是基于Innodb存储引擎。 1.MySQL为什么建议将自增列...
#### 导读 在ActionScript 3(简称AS3)编程中,“import”语句是非常重要的基础概念之一。它主要用于引入外部类库,使得开发者能够在代码中直接使用这些类库中的功能而无需冗余地输入完整的命名空间。本篇文章将...
8、强大的文章显示功能,文章除了分页、页数统计这些,还拥有上一篇、下一篇提示、点击数、评论留言、查看权限(收费文章)、投稿系统等强大的功能 9、独创的Tags标签,该功能随着系统使用时间的增加,一个真正属于您...