Clean code
看《clean code》一书,学习高手写出的代码,简单高效的代
1.目标
Bjarne Stroustrup:优雅且高效;直截了当;减少依赖;只做好一件事
Grady booch:简单直接
Dave thomas:可读,可维护,单元测试
Ron Jeffries:不要重复、单一职责,表达力(Expressiveness)
代码的书写,一定程度上体现了编程的思想,编码者的功力,标识出红色的部分我觉得体现了函数式编程,面向对象的思想,需要细细体会
2 命名
2.1 前期统一规范,名副其实
开发之前约定好,严格遵守,不能再后期临时添加,或者迭代时候,随意命名,或者用注释来解释命名
2.2 避免产生歧义
不要挂羊头卖狗肉,功能与命名不统一,容易出现再后期维护,临时添加需求,迭代等情况
2.3 命名不宜过长,容易搜索易读
名字只是个代名词,能够让人易读,易搜,易讨论,表达出语义,看到这个单词直接思维映射,不能在讨论的时候,一个命名卡半天说不出来,或者太长想不全
3 注释
The proper use of comments is to compensate for our failure to express ourself in code.
事实就是:注释的适当作用在于弥补我们用代码表达意图时遇到的失败,注释只是二手信息。
The truth is in the code 有表现力的代码才是真正的代码
什么是好的注释:
基本信息 --- 便于代码维护,交接
对意图的注释,为什么要这么做 --- 功能实现的思路
警示 --- 容易产生错误,可能为了性能等因素,牺牲了可读性,是一种平衡
放大看似不合理之物的重要性 --- 专业知识,代码的专业性,比如在算法中
4 函数
回归本义,到底什么是函数
我的理解:它是一个代码工具,强调的是,只做一件事,只做一件事,要查询就是查询,要修改就是修改,有固定的输入参数,返回你想要的固定输出,没有多余的副作用,体现它的单一原则
函数里面嵌入多个层级的函数,这种方式见过好多
5 函数抽层应用
‘没有什么问题不是函数抽层解决不了的,如果不行,那就两层’
原则:一个函数,一个抽象层次,函数中的语句表现同一个抽象层级,尤其在面对大型项目复杂交互时,按照广度优先策略,先了解整体结构,抓住主干,然后再深入细节,比如把大象装进冰箱:
def pushElephantIntoRefrige():
openRefrige() 打开冰箱
pushElephant() 把大象放入冰箱
closeRefrige() 关上冰箱
他们属于一个层级,而如何放入冰箱这个细节需要再有一个新的层级
6 测试
测试原则:
You are not allowed to write any production code unless it is to make a failing unit test pass. 没有测试之前不要写任何功能代码
You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures. 只编写恰好能够体现一个失败情况的测试代码
You are not allowed to write any more production code than is sufficient to pass the one failing unit test. 只编写恰好能通过测试的功能代码