减少if...else...的表驱动

先从一个常见的问题入手,在页面中显示今天的星期,如果还用下面的方式,那就需要好好看看本文章了
$result = '';
switch (date('w')){
case 0:
$result ='星期日';break;
case 1:
$result ='星期一';break;
case 2:
$result ='星期二';break;
case 3:
$result ='星期三';break;
case 4:
$result ='星期四';break;
case 5:
$result ='星期五';break;
default:
$result ='星期六';
}
return $result;


编程人员一般采用下面的方式,将星期组织成一个数组(可以称作表),安卓索引取出对应的汉字。
$map= array('星期日','星期一','星期二','星期三','星期四','星期五','星期六');
return $map[date('w')];


这就是表驱动,在大家的编程生涯中或多或少都接触过,只是没有提出来总结一下,现在是不是觉得自己的实现方式很高大上了。

表驱动法是一种编程模式,从表里面查找信息而不是使用逻辑语句(if…else…switch)。

上面只是一维表驱动,下面扩展正多维,先看一个二维的例子,这也是表驱动经典的例子了。

《星际穿越》(原来例子不是这样描述滴)中人类生产食物的总和有限,不得不根据对象的特点进行食物的分配,规则如下

18岁以下男可以领取100斤食物
18-60岁男可以领取120斤食物
60岁以上男可以领取100斤食物
18岁以下女可以领取90斤食物
18-60岁女可以领取110斤食物
60岁以上女可以领取95斤食物

[b]if....else...方式
[/b]
function getFoodWeight($age, $gender)
{

if ($age < 18) {
if ($gender) {
$food = 100;
} else {
$food = 90;
}
} else if ($age > 60) {
if ($gender) {
$food = 100;
} else {
$food = 95;
}
} else {
if ($gender) {
$food = 120;
} else {
$food = 110;
}
}
return $food;

}


[b]表驱动方式,第一维度为年龄,第二维度为性别[/b]
$config = array(
array(90, 100),
array(110, 120),
array(95, 100),
);

function getFoodWeight($age, $gender)
{
global $config;
$ageDimension = ($age - 18 > 0) + ($age - 60 > 0);
$genderDimension = $gender;
return $config[$ageDimension][$genderDimension];
}

表驱动方式是不是使代码能够使代码简单、明了,便于维护。

忽然有一天开始加入身材胖、正常、瘦因子进行食物分发,就是如下的规则
18岁以下男胖子可以领取100斤食物
18岁以下男瘦子可以领取100斤食物
........
那就是三维表驱动啦。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值