Clean Code 阅读总结

一、好的代码重要顺序:
1. 经过所有测试的代码
2. 没有重复的代码
3. 体现系统中的全部设计理念
4. 包括尽量少的实体 例如类、方法、函数等等
5. 大师程序员把系统当成故事来讲,而不是当成程序来讲。他们使用选定的工具来构建所要讲的故事。
二、类、方法、字段命名要求
1.类名一般用名词来命名方法一般用动词或者动词短语命名
2.见名(类名、方法名称、字段名称)知意,不要产生歧义
3.放在语境(上下文)中体会表达是否贴切
4.多个类中出现相同功能的方法那名称最好一致,例如每个类都有添加该类到数据库的方法我们可以将不同类中的相同功能的方法取相同名称,例如每个类都有创建对象的方法我们可以统一起名Add或者Create,这样便于维护
三、循环需要注意的(Foreach、For)
在循环的时候不要将Foreach中的变量设置成i或者j这种没有任何意义的变量,而要见名知意
四、函数书写注意
1. 在函数设计的时候都要把每个函数当成一个小的故事片段来设计,
2. 函数设计重要原则
短小精悍
更加短小
只做一件事
自顶而下设计代码如果每个函数都让你感觉切合我意,这就是整洁代码
3. 函数参数
如果是一元参数存在的情况将参数转化为其他对象传出来(又返回值)或者作为标示修改系统状态(又返回值)
如果参数太多可以封装成一个参数类传入
函数和参数可以形成一种非常好的动词/名词对形式,例如WriteField(name)告诉我们那么是一个Field
4.如果在方法中存在代码实现又有try/catch那么可以考虑吧try/catch单独一个方法这样便于阅读
5.书写代码时,一开始都冗长而复杂。有太多缩进和嵌套循环,有过长的参数列表。名称是随意取的,也会有重复的代码,不过我会配上一套单元测试,覆盖每行丑陋的代码。
然后我打磨这些代码,分解函数、修改名称、消除重复。我缩进和重新安置方法。有时我还会才散类。同时保持测试通过。—我并不从一开始就按照规则写函数,我想没人能做到
6. 写良好的函数要遵循函数短小、有个好名字、而且被很好的归置,不过永远不要忘记,真正的目标在于讲述系统的故事,而你编写函数必须干净利落,形成一种精确而清晰的语言,有助于你讲故事。
五、注释
1. 注释只是弥补你代码表达能力的欠缺—-如果代码表达能力好还需要注释干嘛
2. TODO两种使用情况:
在源代码中放置要做的工作列表,
TODO:是一种程序员认为应该做的,但是由于某些原因目前还没有做的工作。他可能要提醒删除某个不必要的特性或者提醒某人注意
六、代码格式
1.类中关联性不是很大的两个方法中间可以考虑空一行这样感觉不是很紧凑
2. 紧密性很强相关的方法或者字段要放在一起或者放在一个文件中这样有助于查找
3. 如果函数短小的话变量的声明要紧靠函数使用的地方,如果是全局变量的话可以考虑将全局变量放在顶部申明
4. 函数调用和被调用最好放在一起,同时被调用的要放在调用的下面 根据有紧密型
相似性极强的函数要放在一起,如果执行同一个函数的不同变种要放在一起,因为相关性越强,彼此之间的距离就该越短
5. 向报纸原理学习
原理:一般而言函数要自上而下展示函数调用顺序,也就是说,被调用的函数应该放在执行函数下面,这样就建立了一种自顶而下贯穿源代码的良好信息交流
报纸原理:写的很好的报纸,你从上到下阅读,在顶部,可以看到故事的标题好让你决定是否要读下去(要有一个好的名称—见名知意),第一段是整个故事的大纲,给出粗线条概述,但隐藏了故事细节(此处的概述主要表示的是主方法–例如购买东西的时候生成订单,购买人下订单的时候会生成订单主表、生成订单详情、调整产品数量等等方法但是此处下订单就是总方法也是大纲) 细节渐次递进,直到你了解每个细节表达的内容(每个细节就相当于每个被调用的方法例如创建订单主表、生成订单详情、调整产品数量)
示例:

void CreateClientOrder()
{
//此是主方法---大纲
//创建订单
CreateMainOrder()
//创建订单详情
CreateOrderDetail()
//调整产品剩余数量
ChangeProductRemainCount()
}
//创建订单
void CreateMainOrder()
{
//生成订单
}
//创建订单详情
void CreateOrderDetail()
{
//生成订单详情
}
//调整产品数量
void ChangeProductRemainCount()
{
//调整产品剩余数量
}

6. 每行字符争取不要太长不要出现横向滚动条
7.每个方法都要有缩进这样代码看起来有层次结构,便于维护和阅读
七、对象和数据结构
1. 过程式编程(数据结构) vs 对象编程(对象)
过程式编程是以事件为中心(事务变化角度来分析事务)
对象式编程是以对象为中心进行编程(以对象为中心根据对象运行轨迹来编程)
主要区别举例说明:
获取不同对象的面积(长方形、圆形、矩形)
用过程式编程来说我写一个计算不同对象的面积的共用方法无论你传什么对象(长方形、圆形、矩形)都能获取面积
如果用对象式编程的话每个对象都有自己计算面积的方式无需写共用的函数来计算面积
2. 得墨忒耳定律
模块不应了解它所操纵的对象的内部情况 —隐藏数据 暴露操作—对象不应通过存取器暴露内部结构
八、错误处理(待续)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值