使用表驱动法编程,在项目中减少使用if -else的无限重复
表驱动法是一种编程模式——从表里查找信息而不是使用逻辑语句。
随着逻辑复杂性的增加,if/else
或switch中的代码将变得越来越肿,所以我们常说数据比程序逻辑更易驾驭。表驱动法就是将这些逻辑中的数据与逻辑分开,从而减少逻辑的复杂度。
我是在别的语言看到的,但是对于前端来说我也是很不错的编程模式和选择,虽然这些是很简单的东西,但是主要要培养自己这种解决问题的思维。
1.从一个例子说起日历
以一个月的天数为例,我们要写一串if/else
或者switch/case
来表达逻辑。
if (month === 1) {
return 31;
}
if (month === 2) {
return 28;
}
...
if (month === 12) {
return 31;
}
但是我们把数据存到一数据表里,就不需要多而重复的逻辑了。
let monthTable= [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
function getdays (month) {
return monthTable[month-1]
}
2.阶梯访问
对于一些无规则的数据,例如等级划分,列如:0-59等级为F,59-79为E,以此类推。我们没法使用简单的转换将数据转换为索引,但是我们可以使用一个循环,依次检查区间的上下限。
//如果还用if else 这种方式还要需要很多代码。
const grade = [59,79,84,89,94,100];
const level = ["F","E","D","C","B","A"];
function getGrade(grade){
for(let i = 0 ; i < grade.length ; i++){
if(g <= grade[i])
return level[i];
}
}
表驱动的优势
- 可读性更强,逻辑一目了然
- 数据与逻辑解耦,修改数据即可
- 逻辑可重用