代码整洁之道阅读笔记及感悟

什么是整洁代码?

整洁的代码应该是代码逻辑清晰,直接了当,尽量减少依赖关系,使之便于维护,根据某种分层战略完善错误处理代码。每个类、每个函数和每个模块应该具有隔离性,专注做自己的功能,不被其他地方影响也不影响其他地方。我们日常编程中,每个if-else下面的逻辑应该独立抽取,从而使代码逻辑清晰,代码应该块化,一小块一小块,封装为一个一个的方法体,尽量减少代码冗余。(我一直是这么做的,哈哈)


有意义的命名

1、名副其实

无非就是见名之意,但实际情况中我觉得想要清晰表达意思不是那么容易,清晰表达这是一个用户列表很容易,就用userList,但是还有很多其他的,想要清晰表达就会是变量名过长,有些程序员也不认识那么多单词,所以我觉得命名还是要根据系统中的需要,有时候简化单词写法,适当加上注释

2、避免误导

这个我想大部分程序员都受过这种伤害,0和O难以分辨,表示long类型的 l 和1更是难以分辨,写代码我们应该避免这种写法

3、做有意义的区分

就像是a1和a2一样,这种区分是没有任何意义,每次我看到这种代码也会嗤之以鼻。区分变量,表名都应该能让人鉴别出不同之处

4、使用读的出来的名称

自已造的词语自己都读不出来,比如说DtaRecd01,这种看起来就特别low

5、使用可搜索的名称

如果变量和常量可能在代码中多处使用,就应该提取出来,进行常量命名,一是便于搜索,二是便于维护

6、避免思维映射

简单来说就是写一串数字,自己一看就是自己的生日,别人一看可能能映射成是他女朋友的生日,这点要避免,自己的映射和读者的映射应该尽可能的匹配

7、方法名

方法名应当是动词或动词短语,比如getUser、updateUser,这种表名方法是做什么的,重载构造器时,使用描述了参数的静态工厂方法名。列如

Complex fulcrmPoint = Complex.FromRealNumber(23.0);

通常好于

Complex fulcrmPoint = new Complex(23.0);

8、别扮可爱(别搞非主流)

不要用一些俗话,网络流行语来命名

9、别用双关语

应该用insert的地方,为了保持一致,而用add,这就是双关语了。

10、使用解决方案领域名称

只有程序员才会读我们的代码,所以我们可以尽管用计算机科学的术语,算法 名

11、使用源自所涉问题领域的名称

优秀的程序员和设计师,工作之一就是分离解决方案领域和问题领域的概念,与所涉问题领域更为贴近的代码,应当采用源自问题领域的名称

12、添加有意义的语境

很少有名称是能自我说明的。所以我们需要用有良好命名的类、函数或名称空间来放置名称,给读者提供语境

函数

1、短小

这就是代码块化,方法体内代码一般维持在20行最佳

2、代码块和缩进

if语句、else语句、while语句、其中的代码应该只有一行,就是一个函数调用语句,这样不但能保持函数短小,而且可以使代码逻辑清晰可见

3、只做一件事

函数应该只做一件事,这样有助于拆分,修改,并且会具有隔离性,不受外部其他条件改动的影响

4、每个函数一个抽象层级

要确保函数只做一件事,函数中的语句都要在同一抽象层级上,自顶向下读代码,向下规则,我们想要代码拥有自顶向下的阅读顺序,我们想要让每个函数后面都跟着位于下一抽象层级的函数,这样一来,在查看函数列表时,就能循抽象级向下阅读了

5、switch语句

switch语句会很长,当出现新的条件时会变的更长,switch语句应该只出现一次,用于创建多态对象,而且隐藏在某个继承关系中,在系统其它部分看不到

6、使用描述性的名称 

比如isTestTable,选择描述性的名称能理清关于模块的思路

7、函数参数

应尽量避免三个参数及以上,有足够特殊的理由才能用三个以上参数

8、一元函数的普遍形式

向函数传入单个参数有两种及普遍的理由,可能是操作该参数,将其转换为其他什么东西在输出之

9、标识参数

标识参数丑陋不堪,向函数传入布尔值简直是骇人听闻的做法,这样做,方法签名立刻变得复杂起来,大声宣布本函数不止做一件事

10、二元函数

有两个参数的函数比一元函数难懂

11、三元函数

有三个参数的函数要比二元函数难懂的多,排序、琢磨、忽略的问题都会加倍体现

12、参数对象

如果函数看来需要两个、三个或以上参数,就说明其中一些参数应该封装为类了

13、动词与关键字

给函数取个好名字,能较好的解释函数的意图,以及参数的顺序和意图。比如writeField(name),它告诉我们,name是一个field

14、无副作用

函数应该只做一件事,如果做了其他的,这就是副作用

15、输出参数

应该避免使用输出参数,如果函数必须要修改某种状态,就修改所属对象的状态

16、分隔指令与询问

函数要么做什么事,要么回答什么事,但二者不可兼得,应该把指令与询问分隔开来

17、使用异常替代返回错误码

从指令式函数返回错误码轻微违反了指令与询问分离的规则。它鼓励了在if语句判断中把指令当做表达式用,这会导致更深层次的嵌套结构

18、抽离Try/Catch代码块

Try/Catch代码块丑陋不堪,他们扰乱了代码结构,把错误处理与正常流程混为一谈。最好把try和catch代码块的主体部分抽离出来,另外形成函数,函数应该只做一件事,错误处理就是一件事。因此,处理错误的函数不该做其他事,这意味着如果关键字try在某个函数中存在,它就该是这个函数的第一个单词,而且catch/finally代码块后面也不该有其他内容

19、别重复自己

重复是软件中一切邪恶的根源,软件开发领域的所有创新都是在不断尝试从源代码中消灭重复


小结:

代码整洁应该是我们每个程序员都追求的,要证明自己不是一个码奴,是个艺术家。第一次写博客,还没写完,希望给没时间看书又想提升自己的人一点帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值