clean code笔记

如何编写富有表现力的代码
符合三大原则八项注意,达到代码如诗境界
自注释的代码(代码达到注视的境界)
注意方法名和变量名的措辞
不能过长
不需要else语句
前沿
CleanCode的学习方法,阅读大量代码——琢磨优劣——实践
本书分为三个部分:原则,案例分析,案例研究的其实和灵感
作者Robert C Martin
第一部            
第 1 章 整洁代码
程序设计关注 模型、需求、代码的整洁度
习越补越烂,代码越该越糟
作者给我们的建议是取众家之所长,而不应局限一条原则
“编辑器回放”的10:1原则。
第 2 章 有意义的命名
做到名副其实:(需要注释的补充,就不算名副其实)
给人有误导性的名称(不能给人以误导,让人们很容易产生错觉)
做有意义的区分(避免a、an、the的出现)
使用能够读的出来的语言。(人类擅长于语言,用语言的单词来进行)
使用便于搜索的名称(名称的长短,存活的区域)
避免使用编码(现在的编译器已经足够织女智能,可以对类型进行检测,所以不需要对变量进行匈牙利式的编码命名)
尽量避免给成员变量增加前缀,而是要把类做的足够小,接口和抽象类还是可以加前缀,编写出别人易于理解的代码
类名(对象)都应该是名词,而非动词,类的方法名应该是动词而非名词。使用书面语。
每个概念对应一个词,避免多个词造成的歧义。一个次对应一个概念,避免双关用语
要给词语添加语境,让其更容易理解
只要短名称足够清楚,则要避免长名称。
第 3 章 函数
函数满足的条件一应该短小(一般不能超过一屏(20行封顶)),如果过长要对其进行重构,而且一个函数一般只要做一件事情,而且做好这一件事情(不要添加副作用)。
函数的缩进和嵌套一般不能超过两级,尽量保持函数短小。
一个函数一个抽象层级,这样函数读起来就变成了自上而下的(类似树的结构中,数的深度便利)。
第54页,switch不懂
为函数取描述性的名称 ,并且要尽可能的简短,但是长名称的比简短但描述不清楚的名称好的多。
函数的参数要尽可能的少,一般不能超过三个。
单个参数函数应用场景:将参数转化成其他的东西,事件(修改系统的状态)。
二元参数,当参数没有自然的顺序时,应该尽可能将其转化为一元函数。
三元函数就更难于理解,所以函数的参数的个数要尽可能的少。如果参数过多就要将其封装到类中。
对于没有自然顺序的二元函数,可以将参数的顺序编码到函数的名称当中。
分隔指令与询问。
错误处理,避免深层次的嵌套,并且能够从主路径返回错误信息,抽离try/cacth代码块(将try和catch的代码块抽离开来,做到每个模块只处理一件事情)。
当要给类增加新的功能和代码是,不应该直接在源代码中修改原类,这样会导致重新构建和部署所有的东西,于是解决办法就变为复用旧的类,在派生类中添加新功能和方法。
避免重复。重复的可以向上抽取,或者抽离出来。
写函数和写文章的过程是相同的,我们要经过一次次的修改和打磨直到达到心目中的样子。
第 4 章 注释
最好不要添加注释就可以说明问题
Todo注释(要添加还没有添加的功能!)
放大注释(强调功能的重要性)
Java中的Javadoc(java注释文档)
要么写注释,要么不写注释(功能已经很明确),写注释就要写出好的注释
不一定每一个函数每一个类都要用注释,(这样就产生了多于的或者是误导性的注释)
第 5 章 格式
相关的放在一块,不相关的分开存放(空格行和空格的使用的使用)。
阅读的流畅性,(逻辑应该是由上向下依次展开!)
不要违反缩进原则
团队一致的风格(加以延续)便能写出好的代码
第 6章 对象和数据结构
对象(类)和数据结构(结构)之间的二分原理。应用场景更新中添加是新的对象还是新的函数。
对象隐藏数据,暴露行为,从而方便添加新的对象,而结构暴露的数据没有明显的行为,但是方便添加函数。
第 7章 错误处理
输入可能出现异常,设备可能失效,简而言之,就是错误可能会随时发生,程序员有责任在错误发生时仍然能够通过一定的手段保证代码正常运行,这就是错误处理,正确的错误处理方式在保证代码逻辑不被搞乱的情况下以雅致的方式处理错误,保证程序的鲁棒性。
错误处理不能扰乱正常的代码逻辑
异常处理机制破坏了封装性
异常抛出时应该给出足够的信息,来说明异常的抛出的信息。
定义常规流程(尽量不要使用异常进行业务流程控制)
不要返回null值,不如抛出异常,或者返回特例对象(除去对null对象的判断,避免了抛出空指针异常)
避免传递null值,这样会抛出空指针异常(运行时异常),
第 8章 边界
将外来代码干净利落的整合到自己的工程中来
使用不存在的代码(通过Adapter来桥接)从而不会影响工程的进度并且方便测试。
边界是要经常改动的,通过Adapter或者将边界接口隐藏在自己的接口中,从而将改动控制在边界。
第 9章 单元测试
保证测试代码的整洁性
测试代码的应该瞒住(FIRST){F:快速运行,I:各个测试模块相互独立,不能串行测试,R:必须可重复,S:不需要人工来验证,测试程序自己来验证结果,T:要及时对程序进行测试};
第 10章 类
类中{变量{静态变量,变量},函数{被调用的类中的函数紧跟在被调用过的函数的后面}}
类要短小,符合
类的内聚性,一直讲述的是代码的可读性问题,没有太多从性能的角度去考虑
对于多数系统,通过继承手段,满足OCP原则
第 11章 系统
spring实现DI,将依赖关联到xml文件中,但是基于注解的编程,省去xml文件,所以是不是又回到解放前了,DI是基于AOP的
迭代和敏捷的精髓所在,但是软件系统是否可以迭代了

Java中的一些坑
foreach循环时,循环的对象不能为null
collection对象除了copyOnWrite对象外是不能同时进行遍历和删除
java中参数的传递(属于值传递,这一点要谨记)
不要对自己的代码充满坚信
返回null,空指针调用,异常处理
枚举对象的Json化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值