Jun 22

有些程序员可能过于追求 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 作为代码重用的唯一方法!

Related posts:

  1. PHP浮点数显示和转成字符串
  2. Wordpress分页代码
  3. Python logging 标准配置
  4. 用PHP去除重复图片文件
  5. Shell循环

Written by ideawu at 2010-06-22 10:52:44 | Views: 2478

8 Responses to “if-else对优化代码冗余度的反作用”

  1. 1. 超群.com Says:

    “大段代码包成函数”是一个不错的方法,很多时候还可以通过变量来处理:

    if (level > 5) {
    $str1 = “欢迎您, 高级用户!”;
    $str2 = ‘个人信息‘;
    $str3 = “审核文章!”;
    $str4 = “…”;
    } else {
    $str1 = “欢迎您, 用户!”;
    $str2 = ‘个人信息‘;
    $str3 = “发表文章!”;
    $str4 = “…”;
    }

    echo $str1;
    // … 大段代码
    echo $str2, $str3, $str4;

  2. 2. ideawu Says:

    回复超群: 其实也可以用字符串拼接, 呵呵.

  3. 3. 老王 Says:

    后一种稍好,但其实代码看着还是别扭
    比较学究的做法是用类似NullObject的方式,当然,有点学究,很多人不喜欢。。

  4. 4. ideawu Says:

    “NullObject方式”是一种什么方式?

  5. 5. 老王 Says:

    class 高级用户 extends ..
    {
    public function getName()
    {
    return ‘高级用户’;
    }
    }

    class 用户 extends ..
    {
    public function getName()
    {
    return ‘用户’;
    }
    }

    $str1 = “欢迎您, “ . $obj->getName() . ”!”;

  6. 6. ideawu Says:

    回复老王: 确实比较学究.

  7. 7. HeseyWang Says:

    5L这种方式就失去PHP的优势了吧,其实个人感觉PHP里的OO还是不要太多为好

  8. 8. ideawu Says:

    其实不仅仅是PHP, 是否要用class, 和业务分析也有很大的关系. 如果分析的结果不是很自然而然的对象, 不一定非得用class.

Pages:

Leave a Reply

必须登录, 或者浏览器开启JavaScript支持才可以评论!


网站空间,免费试用