程序中变量的抽取的时机,变量命名,变量位置
抽取变量目的是方便阅读理解。
先看个代码示例,功能是持久化文章到文件系统,分成了 3 步:
1. 计算保存文件的路径
2. 数据库存储对象转 Json 字符串
3. 把 json 字符串保存到对应的文件中
对应的代码如下:
为什么要抽取 articlePath 和 articleJson 变量?而不是如下代码:
虽然更简单,但我想大部分人阅读的时候还是会在人脑中把代码翻译为上面的 3 句代码来理解,变量是为了节省阅读者的脑运算,需要为阅读者搭建便于理解的梯子或台阶。
那为什么 articleDo.getIdPin()不抽取个变量呢?因为本身就很易读,不需要再给台阶了。
变量命名的相对性
如何命名是相对的,方法代码块中出现的局部变量有上下文,没必要太长,但也别命名 a,b,c,毕竟别人也要看,结合上下文能懂就行。JDK 的 var 新语法设计也是同理,局部范围结合上下文可以省略类型。
比如上面代码中命名 var articleJson,很容易感知是字符串类型。如果方法上下文只操作文章一个实体,改为 var json 也是很易读的。
变量命名在所处上下文能很容易理解的前提下,尽可能短,去除无用信息。
变量定义位置
变量的声明位置应该就近,变量尽可能离使用的地方近些,减少影响的作用域。
反例,统一在函数开始声明所有变量
应该改为就近,当然更优秀的做法是把两个逻辑抽象为小方法。就近让不同代码块无依赖,已经为小方法的抽取做好了准备。
变量其他建议
• 命名能具体就不要模糊,明明是只狗,就不要叫动物了
• 多维度业务数据 Map 嵌套结构很难看懂,最好体现每个维度的业务语义来取代 Map<Map>结构。
• 不允许以 list,map,entry,temp 等命名,要思考表达的真实意思。
版权声明: 本文为 InfoQ 作者【sdutyq】的原创文章。
原文链接:【http://xie.infoq.cn/article/c6903162c160f1718cd604738】。文章转载请联系作者。
评论