编写可读代码的艺术(二)-- 简化循环和逻辑

@编写可读代码的艺术(二)-- 简化循环和逻辑

1、把控制流程变得易懂

关键思想:把条件、循环以及对流程的控制做的越自然越好,运用一种方式使读者不用停下来重复阅读你的代码

1.1、条件语句中参数的顺序
1.1.1、把不变的参数放在运算符的右边
// 1、固定值maxValue在右边
if (param < maxValue){
	...
}

// 2、固定值maxValue在左边
if (maxValue > param) {
}

// 1、固定值预算在右边
if (unitPriceParam * amountParam > budget) {
	// 预算超支
}

// 2、固定值在等号左边
if (budget < unitPriceParam * amountParam ) {
	// 未超出预算
}

固定值放在等号右边

1.1.2、调整if/else块的执行顺序

优先执行确定的、再是简单的、然后是其他的;

1.1.3、避免复杂三目运算符的使用
// eg: 简单情况使用三木运算符
boolean overBudget = isBudgetIsOver();
overBudget ? methed1() : methd2();

// eg:以下复杂情况不推荐三目运算符
amount = (num * amount/2) > 3 ? param1*param2-param3 : param2-param3;
// 上述三目运算符虽然只占用了一行代码,但是可读性降低,应使用可读性
// 更高的if/else
if ((num * amount/2) > 3) {
	amount = param1*param2-param3 ;
} else {
	amount = param2-param3;
}


1.1.4、避免do/while循序的使用

无论什么情况下,do中的逻辑都会被执行一次,阅读者难确定循环结束的条件;
建议调整为while,可以直观、明了的看到 循环执行的条件

do {
	...
} while (condition)


while(condition) {
	...
}
1.1.5、避免循环嵌套

循环套循环大大降低代码可读性,视情况使用提早返回

for (int i = 0; i < userList.size(); i++) {
	if (null != userList[i]) {
		... do somethingA
		if (null != userLisr[i].name) {
			... do somethingB
		}
	}
}

上述代码过于繁琐,可读性降低,利用continue 增加代码可读性

for (int i = 0; i < userList.size(); i++) {
	if (null == userList[i]) {
	// 结束本次循环,进入下次循环
		continue;
	}
	... do somethingA
  if (null == userLisr[i].name) {
		continue;
	}
	... do somethingB

}
1.1.5、避免条件嵌套

if套if,导致代码可读性极其差,利用return,提前返回

// 3层if判断
void method() {
	if (null != user) {
		if (null != user.age) {
			if (user.age > 18) {
				... do somethingA
			} else {
				... do somethingB
			}
	
		}
	}
}

// 对上述逻辑进行调整,调整为位语句形式

void method() {
	if (null == user) {
	// return 阻断代码执行
		return;
	}
	if (null == user.age) {
		return;
	}
	if (user.age > 18) {
		... do somethingA
	} else {
		... do somethingB
	}
}

2、拆分超长的表达式

关键思想:把超长的表达式拆分为更容易理解的小块

2.1.1、 为过长或者难懂的表达式,引用解释型变量
2.1.2、 为过长或者难懂的表达式,引用总结型变量
2.1.3、 不滥用短路语句
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值