Code Specification
使用条件语句
if 语句
原则一:要使得正常情况执行代码过程清晰,优先考虑代码正常执行情况。
原则二:不要用 “>” 代替 “>=” 或用 “<” 代替 “<=”。
原则三:正常情况的处理放在 if 后面而不是 else 后面(保证能快速找到代码正常的执行过程)。
原则四:if 子句后面跟随一个有意义的语句,避免空语句。
if-else if-else 语句
原则一:把常见的情况放在最前面(既提高了阅读效率,也变相的提高了系统执行效率)。
原则二:确保所有情况都考虑到,else 子句用作出错消息或者不考虑的情况。
switch case 语句
原则一:为 case 选择最有效的排列顺序,当 case 超过3个,排序就更为重要。以下是一些排序原则。
- 按字母顺序或按数字顺序排列
- 把正常的情况放在前面
- 按执行频率排列,最近常执行的 case 子句放在最前面
原则二:尽量简化 case 子句中的操作,避免逻辑嵌套,可以将要执行的子句抽取成一个方法,使得逻辑更清晰。
原则三:不要为了使用 switch 语句而刻意制造一个变量。
原则四:利用 default 子句来检测错误的情况,而不是代替一种 case 的情况。
原则五:避免代码执行执行越过 case,每条 case 都应该及时加 break;
测试
一个值得养成的测试习惯
:::success
每当你遇见一个bug,先写一个测试来清楚地复现它。仅当测试通过时,才视为bug修完。只要测试存在一天,我就知道这个错误永远不会再复现。这个bug和对应的测试也会提醒我思考:测试集里是否还有这样不被阳光照耀到的犄角旮旯
:::
推荐的测试方法
方法一:对每一项相关的需求进行测试,以确保需求都已经被实现。
方法二:对每一个相关的设计关注点进行测试,以确保设计已经被实现。
方法三:用 基础测试
来扩充针对需求和设计的详细测试用例。
方法四:使用一个检查表,记录项目迄今为止所犯的错误类型。
测试技巧
技巧一:选择最有可能找到错误的测试用例。
技巧二:结构化的基础测试,需要去测试程序中每一条语句至少一次。所需基础测试用例的最少数量可以使用该方法计算:程序本身记作1,每遇到关键字时加1,如:if,while,for,and,or,case
。
技巧三:数据流测试,对于数据的状态进行测试。状态可以是:已定义
,已使用
,已销毁
。还有一些术语用来描述对数据进行某种操作之前或之后的状态:已进入
,已退出
。对于所有已定义-已使用的组合进行测试是比较好的实践。
技巧四:边界值分析,对于边界值一般会遇到三种情况:大于边界值,等于边界值,小于边界值。为这些情况编写测试用例。
技巧五:使用几类坏数据测试,坏数据包括(数据太少,太多数据,错误的数据情况,长度错误的数据,未初始化的数据)。使用几类好数据测试,好数据包括(所期望的值,最小的正常情况,最大的正常情况,与旧数据的兼容性)
技巧六:采用容易的手工检查的测试用例。如计算薪水,可以输入一些自身能判断的数据123,根据薪水规则计算出的结果,判断是否符合自己的预期。
表驱动编程
方法命名规范
返回真伪值的方法
位置 | 单词 | 意义 | 例 |
---|---|---|---|
Prefix | is | 对象是否符合期待的状态 | isValid |
Prefix | can | 对象能否执行所期待的动作 | canRemove |
Prefix | should | 调用方执行某个命令或方法是好还是不好,应不应该,或者说推荐还是不推荐 | shouldMigrate |
Prefix | has | 对象是否持有所期待的数据和属性 | hasObservers |
Prefix | needs | 调用方是否需要执行某个命令或方法 | needsMigrate |
用来检查的方法
单词 | 意义 | 例 |
---|---|---|
ensure | 检查是否为期待的状态,不是则抛出异常或返回 error code | ensureCapacity |
validate | 检查是否为正确的状态,不是则抛出异常或返回 error code | validateInputs |
按需求才执行的方法
位置 | 单词 | 意义 | 例 |
---|---|---|---|
Suffix | IfNeeded | 需要的时候执行,不需要的时候什么都不做 | drawIfNeeded |
Prefix | might | 同上 | mightCreate |
Prefix | try | 尝试执行,失败时抛出异常或是返回 errorcode | tryCreate |
Suffix | OrDefault | 尝试执行,失败时返回默认值 | getOrDefault |
Suffix | OrElse | 尝试执行、失败时返回实际参数中指定的值 | getOrElse |
Prefix | force | 强制尝试执行。error 抛出异常或是返回值 | forceCreate, forceStop |
异步相关方法
位置 | 单词 | 意义 | 例 |
---|---|---|---|
Prefix | blocking | 线程阻塞方法 | blockingGetUser |
Suffix | InBackground | 执行在后台的线程 | doInBackground |
Suffix | Async | 异步方法 | sendAsync |
Suffix | Sync | 对应已有异步方法的同步方法 | sendSync |
Prefix or Alone | schedule | Job 和 Task 放入队列 | schedule, scheduleJob |
Prefix or Alone | post | 同上 | postJob |
Prefix or Alone | execute | 执行异步方法(注:我一般拿这个做同步方法名) | execute, executeTask |
Prefix or Alone | start | 同上 | start, startJob |
Prefix or Alone | cancel | 停止异步方法 | cancel, cancelJob |
Prefix or Alone | stop | 同上 | stop, stopJob |
回调方法
位置 | 单词 | 意义 | 例 |
---|---|---|---|
Prefix | on | 事件发生时执行 | onCompleted |
Prefix | before | 事件发生前执行 | beforeUpdate |
Prefix | pre | 同上 | preUpdate |
Prefix | will | 同上 | willUpdate |
Prefix | after | 事件发生后执行 | afterUpdate |
Prefix | post | 同上 | postUpdate |
Prefix | did | 同上 | didUpdate |
Prefix | should | 确认事件是否可以发生时执行 | shouldUpdate |
操作对象生命周期的方法
单词 | 意义 | 例 |
---|---|---|
initialize | 初始化。也可作为延迟初始化使用 | initialize |
pause | 暂停 | onPause ,pause |
stop | 停止 | onStop,stop |
abandon | 销毁的替代 | abandon |
destroy | 同上 | destroy |
dispose | 同上 | dispose |
与集合操作相关的方法
单词 | 意义 | 例 |
---|---|---|
contains | 是否持有与指定对象相同的对象 | contains |
add | 添加 | addJob |
append | 添加 | appendJob |
insert | 插入到下标 n | insertJob |
put | 添加与 key 对应的元素 | putJob |
remove | 移除元素 | removeJob |
enqueue | 添加到队列的最末位 | enqueueJob |
dequeue | 从队列中头部取出并移除 | dequeueJob |
push | 添加到栈头 | pushJob |
pop | 从栈头取出并移除 | popJob |
peek | 从栈头取出但不移除 | peekJob |
find | 寻找符合条件的某物 | findById |
与数据相关的方法
单词 | 意义 | 例 |
---|---|---|
create | 新创建 | createAccount |
new | 新创建 | newAccount |
from | 从既有的某物新建,或是从其他的数据新建 | fromConfig |
to | 转换 | toString |
update | 更新既有某物 | updateAccount |
load | 读取 | loadAccount |
fetch | 远程读取 | fetchAccount |
delete | 删除 | deleteAccount |
remove | 删除 | removeAccount |
save | 保存 | saveAccount |
store | 保存 | storeAccount |
commit | 保存 | commitChange |
apply | 保存或应用 | applyChange |
clear | 清除数据或是恢复到初始状态 | clearAll |
reset | 清除数据或是恢复到初始状态 | resetAll |
成对出现的动词
单词 | 意义 |
---|---|
get 获取 | set 设置 |
add 增加 | remove 删除 |
create 创建 | destory 移除 |
start 启动 | stop 停止 |
open 打开 | close 关闭 |
read 读取 | write 写入 |
load 载入 | save 保存 |
create 创建 | destroy 销毁 |
begin 开始 | end 结束 |
backup 备份 | restore 恢复 |
import 导入 | export 导出 |
split 分割 | merge 合并 |
inject 注入 | extract 提取 |
attach 附着 | detach 脱离 |
bind 绑定 | separate 分离 |
view 查看 | browse 浏览 |
edit 编辑 | modify 修改 |
select 选取 | mark 标记 |
copy 复制 | paste 粘贴 |
undo 撤销 | redo 重做 |
insert 插入 | delete 移除 |
add 加入 | append 添加 |
clean 清理 | clear 清除 |
index 索引 | sort 排序 |
find 查找 | search 搜索 |
increase 增加 | decrease 减少 |
play 播放 | pause 暂停 |
launch 启动 | run 运行 |
compile 编译 | execute 执行 |
debug 调试 | trace 跟踪 |
observe 观察 | listen 监听 |
build 构建 | publish 发布 |
input 输入 | output 输出 |
encode 编码 | decode 解码 |
encrypt 加密 | decrypt 解密 |
compress 压缩 | decompress 解压缩 |
pack 打包 | unpack 解包 |
parse 解析 | emit 生成 |
connect 连接 | disconnect 断开 |
send 发送 | receive 接收 |
download 下载 | upload 上传 |
refresh 刷新 | synchronize 同步 |
update 更新 | revert 复原 |
lock 锁定 | unlock 解锁 |
check out 签出 | check in 签入 |
submit 提交 | commit 交付 |
push 推 | pull 拉 |
expand 展开 | collapse 折叠 |
begin 起始 | end 结束 |
start 开始 | finish 完成 |
enter 进入 | exit 退出 |
abort 放弃 | quit 离开 |
obsolete 废弃 | depreciate 废旧 |
collect 收集 | aggregate 聚集 |