《代码规范系列》第二篇:面对复杂的逻辑判断还使用if-else与switch-case那就弱爆了?学会使用表驱动法

      大家好,我是阿桃,一个想成为被点赞关注的程序员。

     工控行业、物联网行业、机器人行业软件开发可联系我,联系方式QQ:845699561

前言

在工作中我们不难会看到一些逻辑复杂函数,这里面有着大量的if-else或者switch-case,这样的代码不容易理解以及可读性低,每次添加新逻辑时都需要修改调用函数中if-else逻辑,这就影响到该函数的稳定性。

那么对于这样的代码,我们如何将其写得优雅,这就是我们要介绍的表驱动法了,表驱动法在我工作实战编程中是用的比较多的方法了,因为太多人喜欢if-else来写复杂的逻辑,光是if-else洋洋洒洒的写了上百行。

表驱动法使用示例

最早知道这个编程方法还是在《代码大全》第十八章中读到的,它其实可以用在很多地方。

在实战编程中表驱动常用到的还是在一些命令以及相应命令函数处理上,如果用条件判断来编写,就是像下面这种代码:

if('A' == cmd)
{
    A();
}
else if('B' == cmd)
{
    B();
}
else if('C' == cmd)
{
    C();
}
....

当逻辑不负杂的情况下用if-else是简洁明了的,但当它复杂起来时它的局限性就出来了,可读性不高,并且新增命令都需要增加一个if-else,这对于调用逻辑来讲是不可靠的。

如果用表驱动的方式来写,代码就像如下:

//定义相应的命令以及命令处理函数
typedef int(*CMD_FUN) (); 
typedef struct{
    char type;
    CMD_FUN fun;
}cmd_st;

cmd_st cmd[] = {{'A', A()},
                {'B', B()}
                {'C', C()}
                ...};

//查命令表执行相应命令处理函数
for(int i = 0; i < sizeof(cmd)/sizeof(cmd[0]; i++)
{
    if(cmd_type == cmd[i].type)
    {
        cmd[I].fun();
    }
}

这样每次新增命令以及处理函数只需要在cmd表中添加相应的命令以及具体处理函数,逻辑调度不需要改变,并且逻辑调度部分简洁明了。

文章每周持续更新,原创虽短,确不容易,欢迎大家点赞关注,一起交流技术一起提升成长。 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值