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

如何降低switch的圈复杂度--附11例

降低switch语句的圈复杂度是通过优化代码结构和逻辑来实现的。下面是11个例子,展示了如何降低switch语句的圈复杂度:

  1. 使用多态:将switch语句中的每个case分别封装成不同的类,并使用多态来执行相应的操作。这样可以将复杂的switch语句转化为简单的对象调用。
  2. 使用策略模式:将switch语句中的每个case分别封装成不同的策略类,并通过一个策略工厂来选择执行相应的策略。这样可以避免使用switch语句。
  3. 使用映射表:将switch语句中的每个case与相应的处理函数建立映射关系,使用一个字典或哈希表来存储这个映射关系。通过查找映射表来执行相应的处理函数。
  4. 使用状态模式:将switch语句中的每个case分别封装成不同的状态类,并通过状态转移来执行相应的操作。这样可以将复杂的switch语句转化为简单的状态转移。
  5. 使用策略+工厂模式:将switch语句中的每个case分别封装成不同的策略类,并通过一个工厂类来选择执行相应的策略。这样可以避免使用switch语句。
  6. 使用函数指针:将switch语句中的每个case与相应的处理函数建立映射关系,使用函数指针来执行相应的处理函数。
  7. 使用模板方法模式:将switch语句中的每个case分别封装成不同的模板方法,并在子类中实现具体的操作。通过调用模板方法来执行相应的操作。
  8. 使用状态机:将switch语句中的每个case分别封装成不同的状态,并通过状态转移来执行相应的操作。这样可以将复杂的switch语句转化为简单的状态转移。
  9. 使用规则引擎:将switch语句中的每个case分别封装成不同的规则,并使用规则引擎来执行相应的规则。这样可以将复杂的switch语句转化为简单的规则执行。
  10. 使用表驱动法:将switch语句中的每个case分别封装成不同的函数,并使用一个表格来存储这些函数的指针。通过查找表格来执行相应的函数。
  11. 使用设计模式:根据具体的业务场景,选择合适的设计模式来替代switch语句,例如工厂模式、观察者模式、责任链模式等。

以上是一些降低switch语句圈复杂度的方法,具体的选择取决于具体的业务需求和代码结构。在实际开发中,可以根据情况选择合适的方法来优化代码。

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

相关·内容

什么是复杂度如何降低复杂度

复杂度:理解和降低代码复杂性===============在软件开发中,代码复杂性是一个重要考量因素。...复杂度是一种用于衡量代码复杂性指标,它可以帮助开发者评估代码可读性、可维护性和可测试性。本文将详细介绍复杂度概念,并提供几种降低复杂度方法。...同时,我们还将探讨如何在前端开发中使用ESLint和VS Code工具来设置和检测复杂度。什么是复杂度复杂度是由Thomas J....简化代码结构可以使代码更易于理解,减少错误引入,并提高代码可测试性。此外,降低复杂度还有助于改善代码性能,因为简单代码通常执行更快。如何降低复杂度?以下是几种降低复杂度常用方法:1....通过选择合适数据结构和算法,可以降低代码复杂度并提高代码执行效率。

65210

降低代码复杂度

那我们如何在编码中,CR(Code Review)中提早避免这种情况呢?使用复杂度检测工具,检测提交代码中复杂度情况,然后根据复杂度检测情况进行重构。...可能有的人会认为,降低复杂度对我收益不怎么大,可能从短期上来看是这样,甚至你还会因为动了其他人代码,触发了复杂度检测,从而还需要去重构别人写代码。...但是从长期看,低复杂度代码具有更佳可读性、扩展性和可维护性。同时你编码能力随着设计模式实战运用也会得到相应提升。 2. 复杂度度量标准 那圈复杂度,是如何衡量代码复杂程度?...如何降低复杂度 这里其实有很多很多方法,然后各类方法也有很多专业名字,但是对于初了解复杂度的人来说可能不是那么好理解。...所以我把如何降低复杂度方法总结成了一句话那就是——“尽量减少节点判定法中节点数量”。 换成大白话来说就是,尽量少写if、else、while、case这些流程控制语句。

1.3K30

如何降低云计算基础设施复杂度

由于供应商不仅提供基本计算能力,而且还提供平台即服务替代方案和高度专业化服务,如数据存储和机器学习,因此,消费者实现最佳成本或最佳方式复杂性也在不断增加。...不过,也许有人会说,这种显而易见复杂性是选择多样化结果,而实际上,就个别应用来说,总体复杂性可能会降低。本文探讨了导致云计算基础设施复杂性不同方面,以及缓解这种复杂性方法。...因此,妥善利用云服务和技术有可能降低整体(架构和运营)复杂性,至少对单个平台来说是如此。 与简单重新托管相对应是云原生转换。云原生方法,通常与容器化应用程序相关,从根本上考虑到了云灵活性。...自动化工具 计划成功关键是尽可能地推迟破坏。因此,早期关键是采用对战略成功具有基础意义技术。注意,工具选择可能会受到云平台选择影响。...受这种选择影响最大群体需要深入参与到工具选择过程。 云无关自动化可以提供一个走出技术丛林途径,提供集中控制和可重复、可版本化流程(即基础设施即代码)。

41720

Yolo算法演进—YoloCS有效降低特征图空间复杂度论文下载)

本文主要贡献在于引入了一种新特征空间固化方法,能够有效地降低特征图时空复杂度,提高对象检测效率和准确性。...然而,由于单发多框算法精度较低,而基于卷积神经网络目标检测技术计算复杂度较高,因此,寻找一种高效且精度较高目标检测技术成为了当前研究热点之一。...研究结果揭示了解耦头部结构利用与相关损失函数之间逻辑相关性。具体而言,对于不同任务,应根据损失计算复杂性调整解耦头结构。...此外,当考虑提出用于特征空间固化密集通道压缩方法时,直接减少最终层中通道数量以匹配输出通道可能会导致前向传播过程中特征丢失,从而降低网络性能。...这是因为对于匹配正样本,与两个任务相关联损失相对较小,因此避免了过度扩展。这种方法大大降低了解耦头中参数和GFLOP,最终提高了推理速度。

26031

5 分钟了解下【复杂度】是如何计算

---- theme: cyanosis 这是我参与11月更文挑战第2天,活动详情查看:2021最后一次更文挑战 复杂度用来衡量代码结构复杂程度; 公式法 如图是一张简单程序流程控制图:...此图中,E = 9, N = 8, P = 1,因该程序复杂度为 9 - 8 + (2*1) = 3 ; 边个数和节点个数很好理解,但: 什么是 连通分量?...注意:复杂度计算中,计算变量是连通分量,而不是强连通分量! 判定法 上面通过公式来计算复杂度,似乎有点太过麻烦,计算边、节点、连通分量,都要费不少劲! 有没有更加粗暴简单方法呢?...判定法用于简单程序复杂度计算还是很有效果; 需要注意是:对于多分支 case 结构或多个 if - else 结构,必须统计全部实际判定条件数; ---- 复杂度是评判代码优劣标准之一,...降低复杂度大致有如下方法: 简化、合并条件表达式 将条件判定提炼出独立函数 将大函数拆成小函数 以明确函数取代参数 替换算法 从先计算后降低复杂度角度来优化代码,使代码更加易读、易扩展、易维护,这就叫

2K00

dotnet 代码优化 聊聊逻辑复杂度

本文将告诉大家如何判断代码逻辑复杂度以及一些降低复杂度套路,让大家了解如何写出更好维护代码 回顾一下代码设计目标,其中一个很重要点就是解决 复杂代码逻辑 和 人类有限智商 矛盾。...代码可维护是需要综合考虑多个维度,虽然说降低逻辑复杂度基本上都是属于正确事情,但由于实际项目遇到情况比较特殊,还请识别主次矛盾,不要强行优化 逻辑复杂度是指在代码执行过程中,逻辑上形成数量...原始逻辑设计抽象起来如下图 从逻辑上看,以上逻辑设计是存在很多个圈圈,相当于不停拆分、聚合,每一次都是在增加逻辑复杂度,这样逻辑设计对应到代码里面,大概就是一堆 if 或者 switch...在设计上存在将会导致必然出现代码逻辑复杂度时,会导致项目在开发过程中是上帝和程序猿才能看懂代码,开发一定时间之后,就只有上帝才能看懂代码了 在了解基础知识之后,大家也许会问,那如何改造降低复杂度呢...,以及降低逻辑复杂度套路方法。

18930

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

什么是复杂度? ——————————————————————————————————————— 复杂度(Cyclomatic Complexity)是衡量计算机程序复杂程度一种措施。...复杂度 代码状况 可测性 维护成本 1-10 清晰、结构化 高 低 11-20 复杂 中 中 21-30 非常复杂 低 高 >30 不可读 不可测 非常高 如何测量程序复杂度?...其中 --min 5 是指最小允许复杂度,高于5复杂度则输出出来,如下图: ?...,不会降低整个程序复杂度,只是把决策点移到其他地方,但是这样做可以降低你在同一时间必须关注复杂度水平。...由于重点是要降低你需要在头脑中同时考虑项目的数量,所以降低一个给定程序复杂度是有价值。 ?

6.3K42

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

重构后 issueArticle 函数: 如今这就只剩一层缩进,代码复杂度大大降低,可读性和可维护性也大大增强。 禁用else 大多数人印象中,if 和 else 几乎比翼齐飞。...衡量代码复杂度常用标准,复杂度(Cyclomatic complexity,CC),CC越高,代码越复杂,理解和维护成本越高。 在CC判定中,循环和选择语句占主要地位。...CC可使用工具检查,如Checkstyle,可限制最大复杂度,当复杂度大于设定阈值,就报错。 重复 Switch 实际支付价格会根据用户在系统中用户级别有所差异,级别越高,折扣越高。...这并非仅有的根据用户级别进行判断代码,各种需区分用户级别场景都有类似代码,而这也是一种典型坏味道:重复switch(Repeated Switch),通常都是因为缺少一个模型。...引入 UserLevel 模型,消除 switch: 前面代码即可去掉 switchswitch 其实就是一堆“ if…else” 简化写法,二者等价,所以,这个重构手法,以多态取代是条件表达式

77910

GO 中优雅编码和降低复杂度

本次主要是聊聊关于使用接口抽象和降低复杂度方式 工作中,难免会遇到老项目老代码,不仅仅需要我们维护,可能还需要我们在原来垃圾代码上进行新增功能或者是进行优化调整 例如 现有的老代码中关于用户系统这一块就已经经是摇摇欲坠...尽可能降低复杂度 复杂度也可以理解为条件复杂度,是一种用来衡量代码复杂度标准 例如一些没有判断语句代码,复杂度就是 1 如果是 if...else 那么复杂度就是 2 ,简单就可以理解为涉及到判断条件数量...4 ,其中有 3 个判断条件和一个默认正常顺序,因此是 3 +1 = 4 这个时候,我们可以如何降低复杂度呢?...op.ValidateTenantInfo() ... } 这种方式,是不是就可以将复杂度降低到 1 了呢?...而且看起来也优雅了很多 总结 主要叮嘱了我们维护和开发时候,要重视封装,重视抽象,重视降低复杂度 只要你用心去打磨,自然会变得越来越好 但是可别生搬硬套,毕竟一些定制化需求,定制化代码你去做接口抽象是没有啥意义

16210

详解复杂度

复杂度与缺陷 一般来说复杂度大于10方法存在很大出错风险。复杂度和缺陷个数有高度正相关:复杂度最高模块和方法,其缺陷个数也可能最多。...复杂度与遗留代码 对于遗留代码维护或重构,测量复杂度特别有价值。一般使用复杂度作为提升代码质量切入点。...复杂度和软件质量 复杂度 代码状况 可测性 维护成本 1-10 清晰、结构化 高 低 10-20 复杂 中 中 20-30 非常复杂 低 高 >30 不可读 不可测 非常高 降低复杂度方法 重新组织你函数...复杂度思辨 思辨1 高复杂度代码是否可维护性差 在实际项目中为了调试方便,经常会把消息号对应名称打印出来: string getMessageName(Message msg) { switch...因此,当因为”高”复杂度就进行重构的话(例如:技巧2或技巧6),在降低复杂度同时会带来不必要逻辑复杂度。 当然,如果出现下面的情况的话,还是有必要进一步降低复杂度: 消息数过多。

5.4K30

代码复杂度优化

代码复杂度优化 什么是复杂度 复杂度就是可以用来衡量一个模块判定结构复杂程度,数量上表现为独立线性路径条数。...复杂度越高,说明代码维护性低而且不易理解,这个时候测试成本变高同时也容易出现问题。我们需要做就是在代码中优化,降低复杂度,让开发者对程序易于理解和维护。...复杂度也是衡量一个项目的代码质量,在大型项目中,对复杂度也是有一定要求,超出了这个标准可能就会出现告警状态,所以,复杂度是需要每个开发者重视。...list = { dev: pageDevEvent, test: pageTestEvent, online: pageOnlineEvent, }; list[env](); 复杂度大大降低...表达式逻辑优化 表达式逻辑计算增加也会增加复杂度,优化一些结构复杂逻辑表达式,也能在一定程度上降低复杂度

2.1K91

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

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

35610

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

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

9210

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

,本文主角 复杂度 重磅登场,本文将从复杂度原理出发,介绍复杂度计算方法、如何降低代码复杂度如何获取复杂度,以及复杂度在公司项目的实践应用。...复杂度 在 1976 年由 Thomas J. McCabe, Sr. 提出。 复杂度大说明程序代码判断逻辑复杂,可能质量低且难于测试和维护。程序可能错误和高复杂度有着很大关系。...所以每个程序流程图独立组件数目都为1,所以上面的公式还可以简化为 M=E−N+2 。 4. 降低代码复杂度 我们可以通过一些代码重构手段来降低代码复杂度。...— 代码整洁之道 关键是如何定义这 “一件事” ,如何将代码中逻辑进行抽象,有效提炼函数有利于降低代码复杂度降低维护成本。 ?...复杂度检测方法 5.1 eslint规则 eslint提供了检测代码复杂度 rules: 我们将开启 rules 中 complexity 规则,并将复杂度大于 0 代码 rule severity

1.9K60

软件架构与系统复杂性

复杂度并没有一个统一明确度量方式,我们可以站在一个角度上对具体某类或粒度提供一个可供参考度量方法。不论我们如何度量,我们在开发软件系统中一个重要目标就是控制和降低系统复杂度。...在源代码层面为了描述工程质量有以下两个方面衡量: 复杂度:根据代码中路径数量计算循环复杂性。每当一个函数控制流发生分裂时,复杂度计数器就会增加1。每个函数最小复杂度为1。...下面实例对比两种复杂度度量方法差异,在不同写法上圈复杂度统计和认知复杂度统计有何差异。 image.png 上图是两种写法在复杂度统计方法,得出值都是 4,也就是从逻辑上来说是相同。...但是在可读性上来说,明显右侧 switch 代码更高。认知复杂度就是为了度量人易于理解性上存在。...如何管理系统复杂度 架构本质目标就是管理复杂度,而管理复杂度有以下三种有效手段: 抽象:从众多具体事物当中抽取共同、本质属性,摒弃差异非本质属性,简化描述形成概念。

79210

一天一点代码坏味道(4)

多层嵌套 网上有一张多层嵌套代码示例图,你能很快看懂我就服你。很多时候,代码复杂度都是来源于多层嵌套,在软件开发中有一个常用复杂度标准,称之为 复杂度。...即复杂度越高,代码也就越复杂,理解和维护成本也就随之越高。而在复杂度判定规则中,循环语句和选择语句就是一个重要指标。 ?...当代码里只有一层缩进时候,代码可读性是最高。 《ThoughtWorks文集》中曾经提出,“不要使用else关键字”,它认为 else 也是一种代码坏味道。那么,如何不写else呢?...重复switch 对,重复switch也是一种坏味道,而之所以会重复出现,根据郑晔老师的话来说,都是缺少了一个模型。...如果不假思索设计,我们可能就会写一串重复if/else或者switch代码出来,通过上面的分析,我们知道,这个代码复杂度会很高,不利于维护和理解。

49710

从代码审查视角看软件质量

4、代码坏味道检查:代码中函数功能太长、代码中函数中过长参数列表、类功能和数据过于庞大、哑数据类和对象(哑数据就是不含有行为,只有数据对象)、代码中switch表达式过于太长太惊悚、代码中平行继承体系...:函数很有可能出错、需要仔细进行人工评审代码;函数需要进行重构(使用卫戍句进行优化代码逻辑;优化条件逻辑;提取函数;架构设计出现坏味道,需要重构架构); 3、注释比例过低(注释和语句比例或注释和复杂度比例...使用提权函数降低函数复杂度,用表驱动方式降低复杂度、利用多态减少复杂度 认知代码复杂度:嵌套越深、复杂度越高;判断条件越复杂、复杂度越高;递归增加复杂度、break增加复杂度。...总结 提高软件质量是作为开发人员一个很重要指标,通过多维度论述软件质量问题,并且从软件开发者视角看讨论如何写出高质量软件。...最后再从代码审计代码度量分析、静态代码检查和动态代码检查相结合,去分析如何挖掘出软件种种问题,从而提高软件质量。

89050

SPARSE DETR:具有可学习稀疏性高效端到端目标检测(源代码下载)

尽管只有encoder token被稀疏化,但与可变形DETR相比,总计算成本降低了38%,每秒帧数 (FPS) 增加了42%。 02 背景 近年来,我们见证了深度学习中目标检测巨大进步和成功。...为了解决这个问题,有人提出了一种受可变形卷积 (deformable convolution) 启发可变形注意力,并通过注意力模块中关键稀疏化将二次复杂度降低为线性复杂度。...上图说明了如何通过预测二值化解码器交叉注意力图(DAM)来学习评分网络,其中橙色虚线箭头表示反向传播路径。左边部分展示了编码器中前向/反向传播,右边部分展示了如何构建DAM来学习评分网络。...:低分辨率图像中目标检测 Yolo-Z:改进YOLOv5用于小目标检测(原论文下载) 零样本目标检测:鲁棒区域特征合成器用于目标检测(论文下载) 目标检测创新:一种基于区域半监督方法,部分标签即可...:为检测学习更好语义信息(论文下载)

1K10

如何写好代码

最近, 一直在思考如何写好代码, 写人能懂代码, 写能维护代码, 总结下来,实时更新, 有感同深受者或不同意见可一起分享下。 1....理解业务模型 业务模型, 是整个业务核心, 业务搞明白再写, 要让代码在大脑里跑一遍, 再去用环境去测。 2....理解数据模型 数据模型和业务模型息息相关 3.先写异常情况,出现异常返回,再写正常情况 也是为了降低复杂度 4.解偶和可扩展 5.数据一致性 内存存储运行态信息 持久化要DB或文件来存储 6避免用全局变量...服务进程crash,数据如何恢复 7....符合编程代码规范 函数参数不要超过5个 复杂度不要超过5个 函数不要超过50行 单个文件不要超过2000行

47320

引入特征空间,显著降低计算量:双边局部注意力ViT性能媲美全局注意力

然而 Vision Transformer 自注意力机制在图像分辨率较高时,计算复杂度过高。...,同时不会带来过高运算复杂度,现有的图像空间局部注意力机制将一个图像划分为多个局部窗口,自注意力只在同一窗口 token 间运算。...这是一个合理设计,因为一个 token 很可能与空间上邻近 token 相关联。因此,局限于局部窗口自注意力很可能不会显著降低性能,但是可以显著降低计算量。...这本质上定义了一个分段相似度函数,将相似度小特征向量间注意力近似为 0,降低了运算复杂度。与图像空间局部自注意力相比,特征空间局部自注意力在 ViT 模型中运用较少。...bilateral local attention 模块输出: FSLA 重点是如何对特征进行聚类操作,并且在各个类内部计算自注意力。

35640
领券