不要再用if/else和switch/case了,快使用“表驱动法”代替,面向对象思维,对修改关闭。

本文介绍了如何使用表驱动法来替代复杂的if/else和switch/case语句,以减少代码量并提高代码可读性和可维护性。通过举例和实战演示,说明了表驱动法的优势,尤其是在面对大量条件分支时,能够更好地遵循面向对象的设计原则,同时在C++中使用函数指针和指针数组实现表驱动法时,虽然对新手不友好,但在数据量大时能提升程序运行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用表驱动法,替换复杂的if/else和switch/case语句。

复杂的if/else

忘记从哪里看到这么一段话:

互斥条件表驱动
嵌套条件校验链
短路条件早return
零散条件可组合

在实际编程中,我已经遇到了第一种情况了,就是过多的条件导致的分支。在之前我都会用switch/case代替这种情况,毕竟这就是switch的作用,但是这并不是最优解,因为当条件逐渐复杂到几百条的时候,每次修改都是一种痛苦,过长的代码阅读起来也不方便,并且不满足“面向对象”的思想:对修改关闭,对扩展开放。
所以这时候就需要用到了表驱动法!

表驱动法

表驱动法是什么

表驱动是一种编程模式,是一种将输入变量作为索引在表里查找直接的结果或者处理函数,而不是用很多的逻辑语句来进行判断(比如if-sle||switch_case).索引表可以是个数组、map或者其他高效率查找的数据结构。

举个例子

switch(weeek)
{
   
	case Monday:
	Console.WritleLine("星期一");
	case Tuesday:
	Console.WritleLine("星期二");
	case Wednesday:
	Console.WritleLine("星期三");
	case Thursday:
	Console.WritleLine("星期四");
	case Friday:
	Console.WritleLine("星期五");
	case Saturday:
	Console.WritleLine("星期六");
	case Sunday:
	Console.WritleLine("星期日");
}

这段case语句代码实现的功能是将星期的英文转化为中文输出,幸亏一周只有七天,若有八天、九天还需要进行代码的增加,想想都特别麻烦。当使用表驱动法时,你就能发现当遇到此类时会变得特别方便。

解决方法:
1、case语句或if-else语句的结果返回结果是某个值
其实上述的例子就属于这类情况,表驱动法解决过程是:首先将所有返回的值写进一个数组中,定义数组weekDay

string weekDay[]={
   "星期一","星期二","星期三","星期四","星期五","星期六","星期日"}

然后要解决的是将case值和数组下标索引能联系起来,这里最好的办法就是使用枚举型,这是因为枚举值是可以转化为数字的,定义一个枚举Week

public enum 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值