提高代码可读性: 命名技术

 

        提高代码可读性,首推《代码整洁之道》一书。亦可参考 《Java编程规范》。 提高代码可读性直接有利于提高系统的可维护性。如果那些什么事都不做的抽象有什么益处的话,至少它提高了代码的可读性。做一件事,就把它做好。为自己建立一致的命名风格,从此远离命名的困扰吧! 


鼓励:

1.      多查词典,使用具有明确含义的词语或短语;使用熟知的容易理解的词汇。比如,elapsedTimeInDays就比days 要更明确。不要怕长字符串,现在的编辑器基本上有自动补全功能,其实不会有想象中那么麻烦的;同时也不要回避英语,如果不想学英语,就最好不入这个行。

2.      使用表达意图、功能性的词汇;这是因为目前的软件开发仍然是以“功能为导向”的,每一个名字都应该尽量表达出意图。比如,BufferedReader stdinReader , 而不是BufferedReader bufReader。

3.      使用约定俗成的用法词汇。比如i,j,k 作为循环变量的计数;标准输入 stdin, 标准输出 stdout, 标准错误 stderr。

4.      函数命名最好与参数相搭配,以完整地表达意图。比如print(Itemitem) , 而不是 printItem(Item item),因为这样会有语义重复。

5.      表达概念、事物时做有意义的区分。比如 data, info 这些词汇很难区分意义,而 index, elem 则容易区分。

6.      使用读得出来的词汇。 比如 tcpServPort ,而不是 tsp;

7.      相似功能的命名之间要有差异化。比如 insert 和 fastInsert;

8.      名字长短应与作用域对应。作用域越大,名字越长。

9.      类名用名词或名词短语;方法名用动词或动词短语。

10.   每个概念对应一个词汇,建立一致性的命名风格。不要一会get, 一会obtain,一会又fetch,还一会grasp。

11.   适当的简写。比如 firstKthMax 比 fkm 如何 ? 

12.   添加有意义的语境。比如 servport 就比 num 语境更明确;arrlen比n更有语境;addrFirstName比firstName语境明确。

13.   对于技术领域,使用计算机领域的专业术语。比如分区技术 partition; 二分搜索  Binary Search; 模式 patt;

14.   对于业务领域,尽量使用人们容易理解的词汇,必要的时候应当使用领域术语。各个领域都会有自己的一套专业术语,这在网上是很容易查到的。比如说从事财务软件领域,Salary, wage 等都是熟知的领域术语。

 

形式:

A.    可以采用单词首字母大写或小写的驼峰形式(我比较偏向),也可以采用下划线形式。

B.    包名或名字空间中的单词全部小写,用点号隔开(如果允许的话)。

C.    类名中包含的各单词首字母大写,变量名或方法名除一个单词的首字母不大写。推荐《Java编程风格》一书。

 

避免:

1.     避免在命名中嵌入类型。比如账号集合使用 accounts ,而不是 accountList, 除非着重强调这是个List类型,因为这会与Java List 冲突,而不是表达为“列表”的概念。

2.     避免嵌入无意义的前缀或后缀;比如 m_days

3.     避免无意义的语境。比如我会随手用 mysqrt来作为函数名。

4.     尽量避免仅仅为少敲几个字符的简写。程序员喜欢用简写,比如 我有时会用cnt 作为 count 的简写。但前者绝对没有后者容易拼读。遇到简写,就不得不逐字符拼读了。

5.     避免使用俚语等需要文化背景的词汇。

6.     避免在长名称中隐藏细微的差别。比如InsertForComEmploy 和 InsertForVipEmploy

 

可供选择的词汇集萃:

1.     通用词汇:

动词:

数据获取: 设置 set ;获取 get;布尔判断 isXXX/hasXXX; 访问 access ;选择select; 获取 fetch;  可获得的 avail;

数据定位: 定位 locate ;下一个 next ; 上一个 prev ; 第一个 first; 最后一个last;子XXX subXXX (subString); 下标indexOf;  下标所在的事物 XXXat;

数据创建: 构建 build ;创建新的实例 newXXX (newPrime), instanceOf;创建 create ;生成 generate;生产 produce ;

数据检测: 检测 check ; 断言 assert ;测试 test ;  修正 fix ; 补全 completion ; 验证 validate ; 解析 parse;

数据传输: 复制 copy;过滤 filter;传输 transfer ; 移位 shift ;分割 split/divide ; 转化值 valueOf ;

数据展示: 表示 toString ;格式化 format;显示 show, display;打印 print ;

集合操作: 添加add/addAll ;插入 insert/insertAll ;删除delete/deleteAll ;包含 contain ;移除 remove ; 更新update ; 存储store ;排序sort;查找find/findAll ;搜索 search; 清空 clear ; 大小 size ; 逆置 reverse ; 衔接 append ;旋转 rotate ;迭代 iterator ; 扩展 extend/expand ;

文件读写: 打开 open ; 关闭 close ;读 readFrom ; 写 writeTo ; 编辑 edit ; 创建 create ;保存 save ; 保存为saveas;导入 import ; 导出 export ; 加载 load ;刷新 refresh ;

字符串操作:  替换 replace; 差异 diff ;截去 trim ;抽取 extract ;转换convert ; 跳过 skip ;

服务周期: 初始化 init ; 启动 startup ; 关闭 shutdown ; 启用enable ; 禁用 disable ;请求 request ; 响应 response ;清理 cleanup ; 销毁 destroy; 服务 service ;善后清理 dispose ; 辅助 assist ;接受 accept ;分发 dispatch ;调整adjust ;切换 switch ;升级 upgrade ; 退出 exit ;

命令执行: 调用 call ; 执行 exec ; 运行 run ;撤销 undo ; 重置 reset ;取消 cancel ;执行动作 perform ; 

错误处理: 记录 log ; 警告 warn ; 错误err ; 严重 severe ; 致命错误  fatal ;

框架机制: 比较compareTo ; 相等性 equals ;实现 implement ; 声明declear ; 引用 refer ; 发送 send ; 接收 receive/recv ; 调用 invoke ;聚焦 focus ; 保留 retain ; 查看 watch ;匹配 match ; 变换transform;改变 change ;动作 do ;通知 notify ; 等待 wait ;激活/使失效 [de]activate ;隐藏 hide ;导航 nav ; 应用 apply ;

 

 名词:

 随机 rand ; 向量vector ; 数组 array ; 容器或集合collection ; 队列 queue ; 公共common ; 元素 elem ; 下标 index ;

源 src ; 目标 dest; 任务 task ; 测试 tester ; 区域 region ; 范围 range ; 位置 pos ; 元组 tuple; 行 row;  列 row ; 

单元格 cell ; 表格 table ; 记录 record ;最大 max ; 最小 min; 平均 avg/mean ; 计数 count ; 上一个 prev ; 下一个 next ;当前 curr;

标识 id ; 描述 desc;条目 item/entry ;首部 header ; 尾部tail ; 中间 mid ; 左 left ;右 right ;前 front ; 后rear;

缓冲 buf ; 大小size ; 长度 len ; 类型 type/class ;名称 name ;全称 qualifiedName ; 默认 default ; 比较器 comparator ;

变量 var ; 函数func ; 字段 field ;值 value ;访问器 visitor ; 生成器 generator ;迭代器 iter ;工厂 factory ;级别 level;

驱动器 driver ; 管理器 manager ; 控制器 controller ; 处理器 handler ;环境 env ; 演示demo ; 事件 event; 日期 date ;

占位者 holder ;模板类型 <T> ; 根 root; 开始 start/begin; 结束 end ; 路径 path ;命令 command ; 实用工具 utils ; 

孩子 child ; 父亲 parent; 问题 problem ;解决方案 sol/solution ;具体实现 impl; 用法 usage ; 选项 option ; 容量capacity ; 限制 limit ;

 

其它:

不支持的 unsupported ; 递归的 REC/recursive; 通用的 generic ;全局 global ; 局部local; 期待的 expected ; 实际的actual ;

 

【未完待续】

 

posted @ 2012-05-16 13:41  琴水玉  阅读(674)  评论(1编辑  收藏  举报