代码规范 : 控制逻辑
来源:互联网 发布:怎样做数据分析表 编辑:程序博客网 时间:2024/04/30 02:25
写在前面
代码结构混乱不堪, 控制语句复杂,阅读难以理解,是每一个程序员在初学阶段都有所经历过的. 代码如何写出相对较优美的代码呢? 我们可以从控制结构开始说起.
留空白
空白:空白能增强可读性(包括空格,制表符,换行,空行,缩进)
// 拥挤不堪的代码 for(int index=count;index<numLength;index++) // 修改 for(int index = count; index < numLength; index++)
equals
所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较
将实际想对比的数据,放在equals 前面,因为equals里才能能校空
static String getName(){ return null;}// 例子 if ( "set".equals( getName() ) ) { return true; } else { return false; }// 说明: 这样即使getName是null 的返回结果是 false
// 反例 if ( getName().equals("set") ){ return true; } else { return false; }// 这样null 是不能进行equals 比较的,系统会抛出异常
实际使用中还要去除魔法值
private static final String person = "eva"; if ( getName().equals( person ) ){ return true; } else { return false;
条件语句
除常用方法(如 getXxx/isXxx)等外,不要在条件判断中执行其它复杂的语句
//方法一:将复杂逻辑判断的结果赋值给一个有意义的布尔变量名,以提高可读性。 boolean existed = (file.open(fileName, "w") != null) && (...) ; if (existed) { ... }
// 方法二:将负责的逻辑判断结果放在新的函数里面,提高可读性 if ( isSuccess() && young() ){ ... } boolean isSuccess(){ return name != null && "".equals(name.trim()) } int young (){ return ( age + briday ) < 5; }
卫语句
对多层的 if else-if : 使用卫语句
反例:
if(){ if(){ if(){ // 基本每一个初学者,会写出这样的代码,风格很难看,阅读难度大 } }else if(){ }}
卫语句 (风格清晰)
if (){ return ; } if(){ return ; } if(){ .... }
移除控制标志
移除控制标志:使用break continue return 跳出,
// 使用了控制标志的例子(当然我们不要这么做) boolean flag = true; while ( flag ){ if(....){ flag = false; } } // 使用break continue return 跳出 while ( true ){ if(....){ break; } }
大于号 小于号
按照数轴顺序编写数值表达式:
最好是从小到大排列
原来 : MAX >= i && MIN <= i 区间一 : MIN <= i && i <= MAX 区间二 : i<= MIN || MAX <= i
条件反转
在深度嵌套的条件语句里,我们很难使用卫语句
// 反例 if( capital <0 ) { if( num >= sum) { // doSomethings } } // 将条件语句的符号反转,再转成用卫语句 if( capital >= 0 ) { return ; } if( num >= sum) { return ; } // doSomethings
等同判断
利用代数恒等式:减少判断次数
sqrt(x) < sqrt(y) 换为 x < y ; !a && !b 换为 !(a && b)
将null 值变成null对象:
// 原来List<String> list = null ; // 替换List<String> list = new ArrayList<>();
哨兵值:
一个循环常用的值,可以使用一个中间值去表示
for(int i = 0; i< len;i++){ for(int j = 0 ; j < leng ;j++){ rate[j] = rate[j] * dis[i]; //这里的dis[i] 在内层每一次都要去访问 } } //转换为 int disSave = 0; for(int i =0; i< len;i++){ //在java 里 这样能提速不少 disSave = dis[i]; for(int j = 0 ; j < leng ;j++){ rate[j] = rate[j] * disSave; } }
补充一
计算括号的方法, 从零开始计数 遇到”(” 就自己加一 ,遇到”)”,就自己减一
补充二
按照执行的频率排列 控制子句(作用不大,因为你的控制子句并不多,如果多可以考虑用驱动表去 或者 oop 的思想去规避)
对照表
驯服危险的深层嵌套:
第一种,卫语句 第二种,把嵌套的if 装换成 it ..else if 语句 第三种, 将if 创换成case语句, 第四种,将深层嵌套抽出来放到子函数中 第五种, 在面向对象中,使用多态的方式去创建 最后,重新设计深层嵌套的代码
循环语句的优化:
合并: 将两个队相同一组元素进行操作的循环合并在一起 放内层: 把最忙的循环放在最内层
阅读全文
0 0
- 代码规范 : 控制逻辑
- 导航组件控制逻辑代码
- 常见的代码规范及逻辑
- bash (3) 逻辑控制
- S3C2440A时钟控制逻辑
- 控制台下登录逻辑
- python_逻辑控制01
- MSSQL 逻辑控制语句
- NativeScript-逻辑控制
- shell脚本逻辑控制
- python逻辑控制
- JS逻辑控制语句
- SQLServer--逻辑控制语句
- 代码规范
- 代码规范
- 代码规范
- 代码规范
- 代码规范
- js遍历json中所有的键值对
- [ 1.309420] Freeing initrd memory: 484K 卡死问题解决办法
- 商品订单信息管理
- Qt之创建并使用共享库
- PLSQ连接oracle数据库的使用
- 代码规范 : 控制逻辑
- mysql解决datetime与timestamp精确到毫秒的问题
- [知了堂学习笔记] java基础回顾_01
- .Net 知识点链接转载(持续更新)
- markdown编辑器使用方法
- 北京SEO祭司:惊雷算法,刷点击的噩梦
- 组合属性动画的使用
- 请求重定向|请求转发|请求包含
- Python Error : ImportError: No module named 'xml.etree'