减少if-else的滥用,提高代码可读性
背景
我遇见不少人都是这样,多层逻辑嵌套,看似条例清晰、逻辑关系明了。实际上读起来真的很费力。看个最简单的例子,一吧友A想要发一个帖子宣传xx产品,需要征求所有吧主(bz1,bz2)一致同意后才可以发帖。
方案
有人可能会这样写:
function getPostAgree(){
$agree = false; //flag
if ($bz1 == "agree){
$agree = true;
if ($bz == "agreem){
$agree = true;
}else{
$agree = false;
}
} else {
$agree = false;
}
return $agree;
}
看上去很自然. 逻辑也很清楚,bz1同意了之后bz2再同意肯定就没啥问题了.
有人会这样写:
function getPostAgree(){
$agree == false; //flag
if($bz1 == 'agree' && $bz2 == "agree"){
$agree = true;
}else{
$agree = false;
}
return $agree;
}
这样看上去逻辑更加清楚了,两个吧主同时同意.
还有第三种 第四种:
function getPostAgree(){
$agree == false; //flag
if($bz1 == 'disagree'){
return $agree;
}
if($bz2 == 'disagree'){
return $agree;
}
return $agree=true;
}
function getPostAgree(){
$agree == false; //flag
$bz = [$bz1,$bz2];
if(!in_array('disagree',$bz)){
$agree=true;
}
return $agree;
以上看上去都行得通,那么现在又多个1个吧主呢?10个呢?50个呢?
第一个嵌套50个if - else
第二个写49个&&
第三个写50个if
第四个,变成50的数组。而且,同时可以分离出所有bz
$bz = [$bz1,$bz2];
function getPostAgree()
{
global $bz;
$agree = false; //flag
$agree == !in_array("disagree", $bz);
return $agree;
}
如何改进?
- 嵌套逻辑用平行逻辑代替
- 使用表驱动减少判断
- 不是必要的if-else,能不else就别else,不要if-elseif-elseif...-elseif-else
- if-return 代替 if-else
.....