编写可读性代码笔记
1.名字更加丰富
带着单位 时间 进制 nowTime_ms=(new Data()).getTime
带着类型: html_utf8 已经转化为UTF—8的字节码
带着安全性状态提示 plainText_password 纯文本密码,需要加密才能显示
短作用域用尽量短的单词命名
• 使用专业的单词——例如,不用Get,而用Fetch或者Download可能会更好,这由上下文决定。
• 避免空泛的名字,像tmp和retval,除非使用它们有特殊的理由。
• 使用具体的名字来更细致地描述事物——ServerCanStart()这个名字就比CanListenOnPort更不清楚。
• 给变量名带上重要的细节——例如,在值为毫秒的变量后面加上_ms,或者在还需要转义的,未处理的变量前面加上raw_。
• 为作用域大的名字采用更长的名字——不要用让人费解的一个或两个字母的名字来命名在几屏之间都可见的变量。对于只存在于几行之间的变量用短一点的名字更好。
• 有目的地使用大小写、下划线等——例如,你可以在类成员和局部变量后面加上"_"来区分它们。
2.方法
min和max来表示(包含)极限 [min,max]
first~last 表示包含的范围 [frist,last]
begin~end 表示排除范围[begin,end)
布尔值命名 加一些类似is,has,can,should前缀
要小心用户对特定词的期望。例如,用户会期望get()或者size()是轻量的方法
3.格式
如果有需要,维护列对齐
变量声明按照一定的顺序,并遵循,按照重要性,使用频率要好一些
把代码按段落组织,按照逻辑,有些关联性的放在一起,通过注释和空行来隔开
4 注释
从代码本身就能快速判断的逻辑不需要注释
注释不是为了弥补名字的缺憾 好名字>坏名字+注释
注释注明代码的瑕疵
// TODO 需要改进的大点
//todo 需要改进的小点
//FIXME 已知的无法运行的代码
//HACK 对这个问题不得不采用粗糙的解决办法
给未来改进提供一个思路
What Why How 三个维度可选来写注释
采用一个典型的输入输出例子作为注释
使用嵌入式注释来表达传入的参数的意义 Connect(/timeout=/10,/use_entry=/false)
5.控制流变得容易读
(1)条件语句中参数的顺序
if(a<10)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eXjdo9dj-1599462526863)(/Users/yuantingyu/Library/Application Support/typora-user-images/image-20200612103007394.png)]
(2)if/else 语句块的顺序
优先处理简单逻辑
优先处理正逻辑而不是负逻辑 if(debug) 而不是if(!debug)
优先处理可疑或者有趣的情况
(3)三目运算符只在比较简单的情况下使用,尽量用if/else
(4)用提前返回的方式减少if嵌套
在循环中有嵌套的情况 使用continue来介绍if嵌套
6.拆分长的表达式
(1) 使用解释变量以及总结变量来把表达式拆借出来
解释 int
总结user_own_document==use_can_write && user_can_read
if(user_own_document)
(2) 德摩根定律:分别取反,转换与/或
!(a ||b||c)== (!a && !b && !c)
!(a&&b&&c) == (!a||!b||!c)
(3) 简化逻辑,考虑其对立面会不会简单
7.减少变量
没有价值的临时变量,表达式不是特别长而且也很明确表明字段的意思
减少中间结果
减少控制流变量,仅仅用于控制走进逻辑的变量,不包含任何程序