有些程序员可能过于追求 if-else 对代码优化的效果, 却忽略了其带来的对代码清晰度的反作用. 假设这样一个功能, 根据用户的等级显示不同的页面. 如果用户的等级大于等于 5, 他能看到的东西和普通用户(等级小于5)不同, 代码如下:
echo "欢迎您, "; if(level > 5){ echo "高级用户!"; }else{ echo "用户!" } // ... 大段代码 echo '<a href="#">个人信息</a>'; if(level > 5){ echo "审核文章!"; }else{ echo "发表文章!" } echo "...";
我们看到, 随着功能的继续, 不断地出现 if-else, 可能是十几个. 虽然在 if-else 之外的代码得到了重用, 也即冗余度降低了, 但是, 充斥各处的判断不是也极大地影响了代码的清晰度吗?
如果我 copy-paste 一份公用代码(不可过于极端地反对复制粘贴), 就可以只使用一个 if-else:
if(level > 5){ echo "欢迎您, 高级用户!"; // ... 大段代码 echo '<a href="#">个人信息</a>'; echo "审核文章!"; echo "..."; }else{ echo "欢迎您, 用户!"; // ... 大段代码 echo '<a href="#">个人信息</a>'; echo "发表文章!"; echo "..."; }
这样, 优化后全部的代码只有一个分支, 才是符合人思维的逻辑, 虽然代码量扩大了近一倍. 而且, "大段代码"可以封装成函数, 优化后的代码在行数和冗余度上不一定增加.
所以, 不要把冗余度作为代码优化的唯一条件, 更不要把 if-else 作为代码重用的唯一方法!
{
public function getName()
{
return ‘高级用户';
}
}
class 用户 extends ..
{
public function getName()
{
return ‘用户';
}
}
$str1 = “欢迎您, “ . $obj->getName() . ”!”; Reply
比较学究的做法是用类似NullObject的方式,当然,有点学究,很多人不喜欢。。 Reply
if (level > 5) {
$str1 = “欢迎您, 高级用户!”;
$str2 = ‘个人信息‘;
$str3 = “审核文章!”;
$str4 = “…”;
} else {
$str1 = “欢迎您, 用户!”;
$str2 = ‘个人信息‘;
$str3 = “发表文章!”;
$str4 = “…”;
}
echo $str1;
// … 大段代码
echo $str2, $str3, $str4; Reply