提高代码可读性: 命名技术
提高代码可读性,首推《代码整洁之道》一书。亦可参考 《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 ;
【未完待续】