表驱动法编程模式
表驱动法,让你体验什么才是代码的精髓,高灵活度,高效率,更简单,体验代码的魅力!(适合新手入门)
大大赞扬一番,现在我们一起体验代码之优雅。
先来看看代码,你有写过类似下面的这些代码吗?
片段:
1 if (('a' >= inputChar && inputChar <= 'z')||('A'>=inputChar&&inputChar<='Z')) 2 { 3 ..... 4 } 5 else if ((inputChar == ' ') || (inputChar == ',') || (inputChar == ';') || (inputChar == ':') || (inputChar == '?')) 6 { 7 .... 8 }
冗长的逻辑判断,如果你是在维护代码,这些是不是让你很难忍受?你不得不花大量时间去阅读前作者的代码。
好,现在有一个问题:
假设你在写一个计算医疗保险费率的程序,这些费率随着年龄、性别、婚姻状况、以及吸烟与否的不同情况而变化的。你写出的代码会不会是这样?
例:
1 if (gender == Gender.Female) 2 { 3 if (maritalStatus == MaritalStatus.Single)//是否单身 4 { 5 if (smokingStatus == SmokingStatus.NonSmoking) 6 { 7 if (age < 18) 8 { 9 rate = 200.00; 10 } 11 else if (age < 19) 12 { 13 rate = 250.00; 14 } 15 ... 16 else if (age < 65) { 17 rate = 450.00 18 } 19 } 20 else 21 { 22 if (age < 18) 23 { 24 rate = 250.00; 25 } 26 else if (age < 19) 27 { 28 rate = 300.00; 29 } 30 ... 31 else if (age < 65) { 32 rate = 575.00 33 } 34 }//完成单身smokingStatus 35 } 36 else if(maritalStatus == MaritalStatus.Married) 37 { 38 if (smokingStatus == SmokingStatus.NonSmoking) 39 { 40 ... 41 } 42 else 43 { 44 ... 45 }//完成已婚smokingStatus 46 } 47 } 48 .... 49 }
很简单是不是? 很繁琐有木有?你能想象,把这个题目做完需要多大的代码量。
好,现在看看表驱动法的解决这类逻辑控制结构。
首先,我们需要做的是把这些费率存入所有元素索引的数组里面,用简单形象的描述就是,你需要定义一个类型,像这样:
1 //定义吸烟状态 2 3 enum SmokingStatus 4 { 5 Smoking_Firs = 0, 6 Smoking = 0, 7 NonSmoking=1, 8 Smoking_Last = 1 9 } 10 11 //定义已婚状态 12 13 enum MaritalStatus 14 { 15 Marital_First = 0, 16 Single = 0, 17 Maritied = 1, 18 Marital_Last=1 19 20 }
对,它仅仅是一个枚举类型,上述只定义了两个类型, 我们还需要定义一个性别类型,在此就不再重复。
现在数据类型已经定义好了,现在差的就是数据了,数据可以从数据库查出,也可从文件读出,那就要看你怎么选择了,
下面定义一个方法:
1 //返回费率 2 3 private Double Rate(SmokingStatus smoking, MaritalStatus maital, Gender gender, Age age) 4 { 5 Double rate; 6 //... 7 return rate; 8 }
我们现在需要做的,假如保险人的信息是这样的:18岁,单身,吸烟,女。
就像这样,优雅的代码展示:
1 //返回相应的费率 2 3 double rate = Rate(SmokingStatus.Smoking, MaritalStatus.Single, Gender.Female, 18);
一看这句,是不是觉得,很简单?你能理解他的意思,仅仅从字面上,对,就是这么简单。
除去了繁琐的判断,我们要做的只是要加费率的相应数据,其他的通过Rate处理搞定,什么?费率怎么加?既然是表驱动法,就想想表是什么样的吧?
这仅仅是表驱动法的一种。欢迎各位指正,一起学习 一起提高!
分享是一种美德~ 再见~~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构