表驱动法,逻辑掌握优化利器

发布日期:2022-08-07 03:55    点击次数:56

本文转载自微信群众号「架构精进之路」,作者张张。转载本文请联络架构精进之路群众号。

比来很多若干同砚在开发进程中谈到策画表组织的一些idea,为了让巨匠少走一些弯路,来日诰日就策画聊聊表驱动法吧~

一、见解介绍

表驱动法 是一种编程情势,从表里查找信息而不应用逻辑语句(if/else)

现实上,凡是能经由过程逻辑语句来抉择的事物,均可以或许经由过程查表来抉择。

对俭朴的环境而言,应用逻辑语句加倍苟且和直白,但随着逻辑链的越来越宏壮,查表法也就愈发显得更具有吸引力。

应用原则

适合的环境下,给与表驱动法,所生成的代码会比宏壮的逻辑代码更俭朴,更苟且编削,而且效劳更高。

二、应用实际 2.1 间接拜访

2.1.1 来日诰日周几?

传统写法:

String today = "周日"; Switch( dayForMonth % 7 ){     case 0 :          today = "周日";     case 1 :          today = "周一";        case 2 :         today = "周二";        case 3 :         today = "周三";        case 4 :         today = "周四";        case 5 :         today = "周五";        default:         today = "周六";    } 

表驱动法:

String [] weekday = new String[]{"周日","周一","周二","周三","周四","周五","周六"};   String today = weekday [ dayForMonth % 7 ]; 

2.1.2 每个月几多天?

传统写法:

if(1 == iMonth) {   iDays = 31; } else if(2 == iMonth) {   iDays = 28; } else if(3 == iMonth) {   iDays = 31; } else if(4 == iMonth) {   iDays = 30; } else if(5 == iMonth) {   iDays = 31; } else if(6 == iMonth) {   iDays = 30; } else if(7 == iMonth) {   iDays = 31; } else if(8 == iMonth) {   iDays = 31; } else if(9 == iMonth) {   iDays = 30; } else if(10 == iMonth) {   iDays = 31; } else if(11 == iMonth) {   iDays = 30; } else if(12 == iMonth) {   iDays = 31; } 

表驱动法:

把逻辑写成 map 或是 list,精湛莫测,可以或许搞个2维数组还加之了平年的逻辑。

const monthDays = [   [31, 28, 31,系统方案CASE 30, 31, 30, 31, 31, 30, 31, 30, 31],   [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] ]  function getMonthDays(month, year) {   let isLeapYear = (year % 4 === 0) && (year % 100 !== 0 


相关资讯