首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何降低Switch case语句的Cyclomatic复杂性

降低Switch case语句的Cyclomatic复杂性可以通过以下几种方法:

  1. 使用映射表:

使用映射表可以将每个case语句映射到一个函数,这样可以避免在switch语句中使用多个case语句,从而降低Cyclomatic复杂性。

  1. 使用多态:

如果switch case语句是基于对象的类型进行的,可以使用多态来避免switch case语句。可以将共享的代码放在基类中,然后在派生类中重写该方法以实现特定的行为。

  1. 使用策略模式:

策略模式是一种行为型设计模式,它可以避免使用switch case语句。策略模式通过定义一个接口来定义一组算法,然后实现这些算法,并将它们插入到上下文对象中。

  1. 使用状态模式:

状态模式是一种行为型设计模式,它可以避免使用switch case语句。状态模式通过将状态封装到一个状态对象中,并将状态对象插入到上下文对象中,从而避免了使用switch case语句。

  1. 使用函数分解:

如果switch case语句非常复杂,可以将其分解为多个函数,每个函数负责处理一部分case语句。这样可以降低单个函数的复杂性,从而降低整个switch case语句的复杂性。

总之,降低Switch case语句的Cyclomatic复杂性可以通过使用映射表、多态、策略模式、状态模式和函数分解等方法来实现。这些方法可以使代码更加简洁、可读和可维护。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何降低软件复杂性

一、什么是复杂性 Ousterhout 教授认为,软件设计最大目标,就是降低复杂性(complexity)。 所谓复杂性,就是任何使得软件难于理解和修改因素。...复杂性来源主要有两个:代码含义模糊和互相依赖。 Complexity is caused by obscurity and dependencies. 模糊指的是,代码里面的重要信息,看不出来。...二、复杂性隔离 降低复杂性基本方法,就是把复杂性隔离。"如果能把复杂性隔离在一个模块,不与其他模块互动,就达到了消除复杂性目的。"...改变软件设计时候,修改代码越少,软件复杂性越低。...这也导致了复杂性,用户必须面对所有的 Exception。"反正我告诉你出错了,怎么解决是你事。" 正确做法是,除了那些必须告诉用户错误,其他错误尽量在软件内部处理掉,不要抛出。

75230

如何降低软件复杂性

我还没读这本书,但是我看了作者在谷歌一次演讲(Youtube),介绍了这本书主要内容。我觉得非常值得看,大部分书教你怎么写正确代码,这本书教你如何正确设计软件。 ?...下面我就根据演讲视频和网上书评,做一下笔记。 一、什么是复杂性 Ousterhout 教授认为,软件设计最大目标,就是降低复杂性(complexity)。...所谓复杂性,就是任何使得软件难于理解和修改因素。...二、复杂性隔离 降低复杂性基本方法,就是把复杂性隔离。"如果能把复杂性隔离在一个模块,不与其他模块互动,就达到了消除复杂性目的。"...改变软件设计时候,修改代码越少,软件复杂性越低。

87230

Kubernetes如何降低复杂性

如果要以最小风险部署到多云解决方案,你至少要了解你现在出发点,你目的地以及如何达到目的地。大多数企业都无法回答这些问题,却继续在消极被动状态下运营。...云复杂性也同样有两种解决方案: 首先是抽象。使用具有共同特征抽象层可以使你不必直接处理云原生工具和接口复杂性。 第二,自动化。自动化接口使用可以使操作更轻松,因此不再那么复杂。...Kubernetes生态系统(包括最近发布Anthos)本质就是抽象容器内应用程序和数据。其真正价值就在于以高度可扩展方式将这些容器自动化,同时降低复杂性。...我担心是,必须处理复杂性的人不了解自动化或不了解Kubernetes如何解决这些问题。...如果你正在处理云复杂性,那么你必须关注自动化价值,特别是新兴支持技术,如Kubernetes。

53720

基于意图网络(IBN):如何降低网络复杂性

据估计,超过60%用户认为他们IT环境比2年前更复杂。大型企业和服务提供商需要管理这种复杂性,以确保它们所有的流量、策略和配置符合要求和目标。...人们无法手动管理复杂网络,人为管理总会发生一些错误,最终会减慢网络速度,从而降低其敏捷性。 ?...如果检查,您会发现设计文档内容与网络执行松散耦合。首先对于如何将设计文档转换并实现到实际设备,没有一个结构化过程,如何实现它完全取决于个人理解。...它使用声明性语句(即网络应该做什么),而不是描述应该如何完成命令式语句。IBN具有理解大量异构网络能力,这些异构网络由一系列不同设备组成,而这些设备没有一个API。...由数学模型决定每个设备如何响应每种可能类型数据包并在网络范围内(而不仅仅是在设备级别)评估行为,。 原则上,验证过程必须是端到端。它必须从网络上每个设备收集配置文件和状态信息。

63520

如何用ORM支持SQL语句CASE WHEN?

OQL如何支持CASE WHEN? 今天,一个朋友问我,OQL可否支持CASE WHEN语句?...所以,对SOD框架而言,对应ORM如何支持CASE WHEN,就等于是问OQL如何支持CASE WHEN了。...OQL只解决 80%普通查询,其它复杂查询,应该依托于其它技术,否则会增加OQL复杂性; 复杂查询,可以借助于SOD框架SQL-MAP技术,将SQL语句写在SqlMap.config文件中;...大家看看,这个“计算属性”是不是很好起到了 SQLCASE WHEN效果? 只要忘记了数据库,不要遇到问题就去想如何用SQL语句解决,是不是思路豁然开朗?...因此,在SOD框架上使用“计算属性”,有一个必须注意原则:“计算属性”不可以出现在OQL语句中。

2.1K80

C++中使用switch..case语句易出错陷阱和规避方法

参考链接: C++ switch..case语句 C++作为C语言升级版,支持很多C语言不支持语法。...来看这一段C++swtich..case代码:   void fun(int nInput) {    switch(nInput)   {   case 1:     int n;     n =...++新语法支持,在switch..case分支case 1中,定义了整形变量n,并且把它赋值为1。...修改示例代码中case 1部分,尝试把整形变量n初始化为0:   void fun(int nInput) {    switch(nInput)   {   case 1:     int n =...站在编译器角度,如果对整形变量n进行初始化操作,那么则相当于默认switch..case会跳转到case 1标签下,这显然是一种置case 2和case default于不顾非法行为;如果不进行初始化操作

2.1K30

JavaSE中if语句switch语句如何控制程序流程?

switch语句我们再来看一个简单switch语句例子,代码如下:int num = 2;switch (num) { case 1: System.out.println("星期一...可以根据不同条件执行不同代码块,灵活性高。可以嵌套使用,实现较为复杂控制逻辑。缺点如果条件比较多,if语句嵌套层数较深,代码可读性会降低。如果条件表达式判断不当,可能会造成逻辑缺陷或者程序出错。...与if语句不同是,switch语句需要使用case关键字来定义不同条件分支,并且每个case分支需要以break结束。...小结if语句用于根据不同条件执行不同代码块,switch语句用于根据不同表达式值执行不同代码块。if语句有灵活性强优点,但是当条件比较多时,if语句嵌套层数较深,代码可读性会降低。...switch语句具有可读性高优点,但是每个case需要加上break语句,否则会导致程序执行错误。

16051

业务代码如何才能不再写出大串ifelse?

你最爱 if、for都是一类坏味道,没想到吧?自己竟然每天都沉浸在写坏味道体验中。 控制语句,到底何错之有呢?...重构后 issueArticle 函数: 如今这就只剩一层缩进,代码复杂度大大降低,可读性和可维护性也大大增强。 禁用else 大多数人印象中,if 和 else 几乎比翼齐飞。...衡量代码复杂度常用标准,圈复杂度(Cyclomatic complexity,CC),CC越高,代码越复杂,理解和维护成本越高。 在CC判定中,循环和选择语句占主要地位。...这并非仅有的根据用户级别进行判断代码,各种需区分用户级别场景都有类似代码,而这也是一种典型坏味道:重复switch(Repeated Switch),通常都是因为缺少一个模型。...引入 UserLevel 模型,消除 switch: 前面代码即可去掉 switchswitch 其实就是一堆“ if…else” 简化写法,二者等价,所以,这个重构手法,以多态取代是条件表达式

78410

降低认知复杂度5个整洁代码技巧

降低认知复杂度是帮助您编写安全、可维护和可靠代码关键,这将使开发人员(包括您自己)更快乐。...降低认知复杂度是帮助你编写安全、可维护和可靠 干净代码 关键,这将使其他开发人员(包括你自己)在长期内更快乐。以下是如何采取纪律性方法。 1. 编写团队会感谢你代码 软件开发非常像团队运动。...理解你编写代码如何融入整体项目以及其他需要阅读代码开发人员如何理解它至关重要。 圈复杂度(Cyclomatic complexity)最初被引入作为一种衡量模块控制流测试和维护难易程度方法。...switch 语句是一种很好方法,可以帮助消除一系列嵌套 if 或 if/else 语句,这些语句使代码变得模糊不清,并且不会增加代码认知复杂度。...帮助你跳出循环 continue 或 break 语句也可以帮助你编写更清晰代码,并且同样不会增加复杂度。这些只是可以帮助降低认知复杂度不同类型结构中一部分。 5.

9810

圈复杂度和代码质量优化(附带示例代码纠正代码质量)

——————————————————————————————————————— 圈复杂度(Cyclomatic Complexity)是衡量计算机程序复杂程度一种措施。...一但遇到以下关键字,或者其它同类词,就加1:if,while,repeat,for,and,or。 给case语句每一种情况都加1。...,不会降低整个程序复杂度,只是把决策点移到其他地方,但是这样做可以降低你在同一时间必须关注复杂度水平。...由于重点是要降低你需要在头脑中同时考虑项目的数量,所以降低一个给定程序复杂度是有价值。 ?...由于php是弱类型语言,这里体现有点模糊): switch ($cat){     case ‘fish’:         eatFish();     case ‘moss’:         eatMoss

6.5K42

重构指标之如何监控代码圈复杂度

重构代码,以适配当前模块设计之初未考虑到多样化场景,并增加模块可维护性、健壮性、可测试性。那么,如何明确重构方向,以及量化重构结果呢?代码圈复杂度可以是一个供选择指标。...下文将介绍如何获取应用代码圈复杂度做到线上监控,给到复盘程序复杂程度数据支撑。...2. if-else-else、switch-case:每增加一个分支,复杂度增加1,&& 、|| 运算也为一个分支。 3. 循环结构:增加一个循环结构,复杂度增加1。...4. return:增加一条return语句,复杂度将加1。...对于软件代码好坏衡量,圈复杂度可以作为一个参考指标,研发可以通过提炼拆分函数、优化算法、优化逻辑表达式等方法降低模块(函数)圈复杂度。

38110

详解圈复杂度

详解圈复杂度 圈复杂度概念 圈复杂度(Cyclomatic complexity,简写CC)也称为条件复杂度,是一种代码复杂度衡量标准。由托马斯·J·麦凯布(Thomas J....1,也即控制流图区域数,对应计算公式为: V (G) = P + 1 其中P为判定节点数,判定节点举例: if语句 while语句 for语句 case语句 catch语句 and和or布尔操作 ?...:三元运算符 对于多分支CASE结构或IF-ELSEIF-ELSE结构,统计判定节点个数时需要特别注意一点,要求必须统计全部实际判定节点数,也即每个ELSEIF语句,以及每个CASE语句,都应该算为一个判定节点...评估重构必要性和具体方式,以降低出现代码维护问题可能性。...switchcase…多处重复。对于消息过多情况,可以考虑将消息进行分类,然后采用技巧1进行重构。

5.5K30

面试题007:解释一下C语言中switch语句如何工作?它有哪些限制?

问题7 解释一下C语言中switch语句如何工作?它有哪些限制?...参考答案 当面试官问到C语言中switch语句时,可以这样回答:switch语句是一种用于根据表达式值选择不同执行路径控制流语句。...执行代码块:一旦找到匹配case标签,将执行与该标签关联代码块。在执行代码块后,程序将继续执行switch语句后面的代码,除非遇到break语句或者switch语句结束。...switch语句一些限制包括: 「switch语句expression必须是一个整型或枚举类型。」...如果没有default标签,程序将继续执行switch语句后面的代码。 5.「每个case标签必须是唯一」,不能有重复case常量。

27630

前端代码质量-圈复杂度原理和实践

,本文主角 圈复杂度 重磅登场,本文将从圈复杂度原理出发,介绍圈复杂度计算方法、如何降低代码圈复杂度,如何获取圈复杂度,以及圈复杂度在公司项目的实践应用。...圈复杂度 2.1 定义 圈复杂度 (Cyclomatic complexity) 是一种代码复杂度衡量标准,也称为条件复杂度或循环复杂度,它可以用来衡量一个模块判定结构复杂程度,数量上表现为独立现行路径条数...result : result;} 上面的代码中一共有 1个 if语句,一个 for循环,两个 case语句,一个三元运算符,所以代码复杂度为 4+1+1=6。...— 代码整洁之道 关键是如何定义这 “一件事” ,如何将代码中逻辑进行抽象,有效提炼函数有利于降低代码复杂度和降低维护成本。 ?...复杂度曲线图可以很快帮你更早发现上面这两个问题,发现它们后,你可能需要重构代码。复杂性趋势对于跟踪你代码重构也很有用。复杂性趋势下降趋势是一个好兆头。

1.9K60

C语言C++基本语句编程风格

初学者阶段编程时,编写基本语句可能会有隐含错误方式,基本语句主要针对if、for、while、goto、switch等,它们看似简单,但使用时隐患比较多,本文归纳了使用语句一些规则和建议。...x:y); 循环语句效率 C++/C循环语句中,for语句使用频率最高,while语句其次,do语句很少用。提高循环体效率基本方法是降低循环体复杂性。...switch是多分支选择语句,而if语句只有两个分支可供选择。...switch 语句基本格式: switch(variable) { case value1: break; case value2:...break; default: break; } 每个 case 语句结尾不要忘了加 break,否则将导致多个分支重叠(除非有意使多个分支重叠)。

2.1K10

降低代码圈复杂度

Cyclomatic complexity is a software metric used to indicate the complexity of a program....为什么需要圈复杂度 如果你现在项目,代码可读性非常差,难以维护,单个函数代码特别的长,各种if else case嵌套,看着大段大段写糟糕代码无从下手,甚至到了根本看不懂地步,那么你可以考虑使用圈复杂度来衡量自己项目中代码复杂性...如何降低圈复杂度 这里其实有很多很多方法,然后各类方法也有很多专业名字,但是对于初了解圈复杂度的人来说可能不是那么好理解。...所以我把如何降低圈复杂度方法总结成了一句话那就是——“尽量减少节点判定法中节点数量”。 换成大白话来说就是,尽量少写if、else、while、case这些流程控制语句。...3.2 少写流程控制语句 这里举个特别简单例子。 其实可以直接优化成下面这个样子。 例子就先举到这里,其实你也发现,其实就像我上面说一样,其目的就是为了减少if等流程控制语句

1.3K30

5.14 汇编语言:仿写Switch选择结构

switch语句由一个表达式、多个case标签以及对应代码块组成。...程序会将表达式值与每个case标签进行匹配,一旦找到匹配case标签,程序将执行对应代码块,并继续执行该代码块之后代码,直到遇到break语句或者switch语句结束。...11.25 仿写有序线性优化在switch分支数小于4情况下,编译器将采用模拟IF-ELSE分支方式构建SWITCH结构,这样则无法发挥出SWITCH语句优势,当分支数大于3并且case判断值存在明显线性关系时...,Switch语句优化特性才可以被凸显出来。...,这段汇编代码编写时应格外注意次序,否则容易写乱套,不论如何本人还是按照编译器习惯将其转换为了对等汇编语句

19010
领券