if/else的优化方法
if/else的优化方法
1)if/else 语句块的顺序
首先处理正逻辑而不是负逻辑
先处理简单的情况
先处理有趣的或者是可疑的情况
2)通过提早返回减少嵌套
3)总结变量
用一个短很多的名字来代替一大块代码,这就是总结变量。
使用德摩根定理,分解复制的判断逻辑
拆分巨大的语句,让语句更容易快速阅读
4)分析函数(或代码块)画出逻辑树
逻辑树是整合1)和2)两个部分,为了理清复杂if语句逻辑二产生的。
逻辑树的结构与哈夫曼树类似
逻辑树规则:(模块的定义:每一个if/else的分支即为一个模块)
1.每个模块都是一个根结点,每一个根结点都会结束函数运行。
2.同等级的模块(即if语句的正反两面),无子模块的模块(内部无if语句)优先级高于拥有子模块的模块(内部嵌套if语句)
3.同等级和同条件(两个模块都拥有子模块或者都没有子模块)的情况下,使用率高的模块优先级高于使用率低的
4.若模块中包含子模块,子模块的优先级高于父模块。
如下程序
if(user_result == SUCCESS ){ if( permission_result != SUCCESS){ reply.WriteErrors("error reading permissions"); reply.Done(); return; } reply.WriteErrors(""); }else{ reply.WriteErrors(user_result); } reply.Done();
return;
可将程序分为绿、红、紫三模块,蓝色是前置条件,黑色是共有部分。
根据上述规则
1.根据规则2,紫、红两个属于同等级模块,但是由于红色模块中包含一个子模块,所以红色模块优先级低于紫色模块
2.根据规则4,绿色模块属于红色模块子模块,所以绿色模块优先级高于红色模块
3.根据1,2,函数的优先级排列由高到低为:紫色>绿色>红色
结果为:
if(user_result != SUCCESS){ reply.WriteErrors(user_result); reply.Done(); return; } if(permission_result != SUCCESS){ reply.WriteErrors(permission_result); reply.Done(); return; } reply.WriteErrors(""); reply.Done();
return;