c语言圈复杂度switch,C语言switch/case圈复杂度优化重构

本文介绍了如何通过重构技术降低C语言中switch/case结构的圈复杂度,包括程序块重构和case重构。程序块重构涉及提炼函数、分解条件表达式等方法,而case重构则通过将switch/case转换为状态机、编译期构建、链接期构建或运行时构建的表来优化。这些重构方法不仅可以降低圈复杂度,还能提高代码的可读性和可维护性。
摘要由CSDN通过智能技术生成

软件重构是改善代码可读性、可扩展性、可维护性等目的的常见技术手段。圈复杂度作为一项软件质量度量指标,能从一定程度上反映这些内部质量需求(当然并不是全部),所以圈复杂度往往被很多项目采用作为软件质量的度量指标之一。

C语言开发的项目中,switch/case代码块是一个很容易造成圈复杂度超标的语言特性,所以本文主要介绍下降低switch/case圈复杂度的重构方法(如下图)。switch圈复杂度优化重构可分为两部分:程序块的重构和case的重构。程序块重构是对代码的局部优化,而case重构是对代码的整体设计,所涉及的重构手段也各不相同。

832b771a43d1c970e18af0c7af48ff9a.png

程序块重构

程序块重构指的是每个case内的代码段重构。Martin Fowler 的《重构——改善既有代码的设计》(电子版)书中总结了80多种重构方法。书中针对每种技术都给出了示例说明,另外这里、这里还提供了其他语言的示例和进一步介绍。因为存在大量示例,所以本文针对这些方法不再给出示例,有兴趣的同学可以通过上面几种途径了解学习。不过这些技术中有些是改善代码的可读性,有些是改善代码的可扩展性,并不是每项技术都能有效减低圈复杂度。其中可以降低圈复杂度的方法有如下几种:

提炼函数(Extract Method)。你有一段代码可以被组织在一起并独立出来。将这段代码放进一个独立函数中,并将函数名称解释该函数的用途。

分解条件表达式(Decompose Conditional)。你有一个复杂的条件(if-then-else)语句。从if、then、else三分段落中分别提炼出独立函数。

合并条件表达式(Consolidate Conditional Expression)。你有一系列条件测试,都得到相同结果。将这些测试合并为一个条件表达式,并将这个条件表达式提炼成为一个独立函数。

合并重复的条件片段(Consolidate Duplicate Conditional Fragments)。在条件表达式的每个分支上有着相同的一段代码。将这段重复的代码搬移到条件表达式之外。

移除控制标记(Remove Control Flag)。在一系列布尔表达式中,某个变量带有“控制标记”的作用。以break语句或return语句取代控制标记。

这些重构方法除了降低圈复杂度外,还有如下好处:

满足单一职责设计原则,提高代码可读性。

去除重复冗余代码。你可以删除大量相同的条件语句。

满足“Tell, Dont Ask”原则,告诉对象需要做什么,而不是怎么做。

case重构

对于一个switch有几十个case的情况,其圈复杂度往往上百,程序块重构显然已不能解决其本质复杂度。如果要降低其圈复杂度,必然需要对代码进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值