今天看了下《代码大全2》中的第26章,代码调整的技术,主要的内容是从代码上提升执行效率优化空间,不过他提到的有几种方法会降低代码的可读性,
一,逻辑:java和c都支持短路求值,即顺序判断逻辑判断时如果前面的判断成功后面的判断将会取消执行,知道答案后停止判断会节省一大部分耗时。按照出现频率调整判断顺序,还是顺序判断的问题,如果需要判断的值某些情况下出现频率会偏高,那么无疑将他作为首选判断会提高效率。
二,查询代替复杂表达式,通过将现实情况模型化成表或者其他形式的数据结构,然后通过查询数据就可以代替复杂的逻辑表达式(为了便于维护需要良好的说明或文档解释)。
三,惰性求值,如果涉及到较大的数据量load的情况,应该在使用时再load再计算。
四,循环,将每一次的循环中都会出现的判断放到外面来做(牺牲代码可读性来换取效率有悖于编程规范,属于大招不建议随便放技能)。
五,合并,同一组元素操作的循环合并到一起,给他的sample是visual basci看不懂
六,展开,目的是减少维护所需的工作。。。这个。。。
七,尽可能较少在循环内部做的工作,sample给出的就是将循环中的局部变量的声明和赋值拿到了外面。
八,哨兵值,sample中给的就是通过判定数组元素是否为数组最后一个值(给定的值)来判断在范围内是否找到了参数值。
found = FALSE;
i = 0;
while((!found)&&(i<count)){
if(item[i] == testValue){
found = TRUE;
}
else{
i++;
}
}
if(found){'''''''''}
简化之后为:
initialValue = item[count];
item[count] = testValue;
i = 0;
while(item[i] != testValue){
i++;
}
if(i<count){}
如果是数组最后发现了塞进去的元素,其实这并不是需要查找的值而是哨兵值。