前言
可读性基本原理
代码的写法使别人理解它所用时间最小化
可读性与其它原则并不冲突
代码改进
信息在命名中体现
- 选择专业的词或者更有表现力的词语
比如get 替换成fetch或者download,get 在编程中没有体现出太多的业务含义
比如size(),替换成height()和numnodes() - 避免泛泛类型的词,如temp,retval
temp,场景应该只用于短期且临时的场景 - 具体名字代替抽象名字
- 带单位的值
比如,delay_second - 名字附带其它的信息
比如纯文本,命名可以从password修改为plaintext-password - 名字的长度适当,在小的作用域里可以适当短的名字
- 有目的的采用大写小或者下划线
不会误解的名字
多问自己几次,这个命名会不会让team 小伙伴产生歧义
- 用min Max 来表示极限
- first last 表示范围
- begin,end 表示包含的范围
- 对boolean 的使用is,has,can 或者should,可以让值更加明确
- 小心用户对特定值的期待,比如get()是一个轻量化的操作,不应该有复杂的逻辑
代码的审美
- 相同的代码布局,这点,idea可以给你保证
- 接口内容,多个类似的方法,可以进行分组,用多个空行分开
- 代码进行分段,比如复杂逻辑 , 流程可以分为1,2,3,4
- 代码风格一致
哪些地方要写注释
- 最好能从命名体会表达的具体含义,而不是为了给不好的名字加注释,好代码>坏代码+好注释
- 全局或者总结的注释,记录整体的思路
- 为代码里的瑕疵作好标记,比如todo,fixme,hack
- 常量加注释,尤其是数字,比如说这个数字是如何得出来的
- 站在读者的角度,为部分异常的情况写注释
- 常用的固定逻辑不用注释
写优雅的注释
- 复杂的方法用可以用例子来说明
- 精确的描述函数的行为
让控制流变得易读
- if else 语句块的顺序
先处理正逻辑
先处理简单的情况
if(a==1){return };
else {}
- 三目表达式,最好只在非常简单的情况下使用,否则使用if else会更好
- 从函数中提前返回,比如 可以遇到一个case就return ,对于复杂的嵌套也可以写成这个逻辑,嵌套的逻辑可以修改成线性的
if (a==1){ return }
if (a==2){ return }
拆分超长的表达式
- 引入解释变量,可以帮忙解释子表达式的含义
- 引入总结变量,用一个短的表达式名字来代替一大块代码
变量与可读性
- 删除掉没有价值的临时变量
- 缩小变量的作用域
- 变量的位置,移到合适的位置,而不是在开头定义
重新组织代码
- 抽取不相关的子逻辑,比如在for循环中,不应该出现复杂的业务逻辑,逻辑应该为单独 的方法
- 创建大量通过代码
- 一次只做一件事,定义要实现的功能,把这个功能分拆成不同的函数