建议24:优化if逻辑(1)
逻辑顺序体现了人的思维的条理性和严密性。合理的顺序可以提升解决问题的品质,相反,混乱的顺序很容易导致各种错误的发生。在分支结构中经常需要面临各种优化逻辑顺序的问题。
人在思考问题时,一般总会对各种最可能发生的情况做好准备,这叫做“有备而来”。分支结构中各种条件根据情况的先后、轻重来排定顺序。如果把最可能的条件放在前面,把最不可能的条件放在后面,这样程序在执行时总会按照代码先后顺序逐一检测所有条件,直到发现匹配的条件时才停止继续检测。如果把最可能的条件放在前面,就等于降低了程序的检测次数,自然也就提升了分支结构的执行效率,避免空转,这在大批量数据检测中效果非常明显。例如,对于一个论坛系统来说,普通会员的数量要远远大于版主和管理员的数量。换句话说,大部分登录的用户都是普通会员,如果把普通会员的检测放在分支结构的前面,就会减少计算机检测的次数。
if优化目标:最小化找到正确分支之前所判断条件体的数量。if优化方法:将最常见的条件体放在首位。例如:
- if(value < 5) {
- //do something
- } else if(value > 5 && value < 10) {
- //do something
- } else {
- //do something
- }
这段代码只有在value 值经常小于5 时才是最优的。如果value 经常大于或等于10,那么在进入正确分支之前,必须两次运算条件体,导致表达式的平均运行时间增加。if中的条件体应当总是按照从最大概率到最小概率的顺序排列,以保证理论运行速度最快。
另外一种减少条件判断数量的方法:将if编写成一系列嵌套结构。使用一个单独的一长串的if结构通常导致运行缓慢,因为每个条件体都要被计算,例如:
- if(value == 0) {
- return result0;
- } else if(value == 1) {
- return result1;
- } else if(value == 2) {
- return result2;
- } else if(value == 3) {
- return result3;
- } else if(value == 4) {
- return result4;
- } else if(value == 5) {
- return result5;
- } else if(value == 6) {
- return result6;
- } else if(value == 7) {
- return result7;
- } else if(value == 8) {
- return result8;
- } else if(value == 9) {
- return result9;
- } else {
- return result10;
- }
在这个if结构中,所计算的条件体的最大数目是10。如果假设value 的值在0~10 之间均匀分布,那么会增加平均运行时间。为了减少条件判断的数量,可重写为一系列嵌套结构,例如: - if(value < 6) {
- if(value < 3) {
- if(value == 0) {
- return result0;
- } else if(value == 1) {
- return result1;
- } else {
- return result2;
- }
- } else {
- if(value == 3) {
- return result3;
- } else if(value == 4) {
- return result4;
- } else {
- return result5;
- }
- }
- } else {
- if(value < 8) {
- if(value == 6) {
- return result6;
- } else {
- return result7;
- }
- } else {
- if(value == 8) {
- return result8;
- } else if(value == 9) {
- return result9;
- } else {
- return result10;
- }
- }
- }
时间: 2024-10-23 05:01:21