每个判断语句(如if语句)和循环语句(如for循环)都会增加控制流图中的节点数和边数。圈复杂度的值等于图中边数减去节点数,再加上2。这个值表示了代码中独立路径的数量,即代码执行的可能路径数。...圈复杂度的计算方式可以通过以下步骤进行:首先,将程序转换为控制流图(Control Flow Graph,CFG)。控制流图是一种图形表示方法,用于描述程序中的控制流程,包括各种条件和循环语句。...减少条件语句的嵌套条件语句的嵌套是导致圈复杂度增加的常见原因之一。当条件语句嵌套层级过多时,代码的可读性和可维护性都会受到影响。...为了降低圈复杂度,可以考虑使用早期返回(early return)的方式来减少条件语句的嵌套。通过在函数内部尽早返回结果,可以避免深层嵌套的条件判断。...拆分复杂函数函数的复杂性是导致圈复杂度升高的另一个常见原因。当一个函数包含过多的逻辑和操作时,它往往难以理解和维护。为了降低圈复杂度,可以将复杂的函数拆分成多个小函数,每个函数只负责一个特定的任务。
下面是典型的控制流程,如if-else,While,until和正常的流程顺序: 节点判定法 其实,圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上...1,也即控制流图的区域数,对应的计算公式为: V (G) = P + 1 其中P为判定节点数,判定节点举例: if语句 while语句 for语句 case语句 catch语句 and和or布尔操作 ?...圈复杂度与缺陷 一般来说圈复杂度大于10的方法存在很大的出错风险。圈复杂度和缺陷个数有高度的正相关:圈复杂度最高的模块和方法,其缺陷个数也可能最多。...圈复杂度与遗留代码 对于遗留代码的维护或重构,测量圈复杂度特别有价值。一般使用圈复杂度作为提升代码质量的切入点。...整体圈复杂度从单个函数的14降到多个函数最高的5。
那我们如何在编码中,CR(Code Review)中提早的避免这种情况呢?使用圈复杂度的检测工具,检测提交的代码中的圈复杂度的情况,然后根据圈复杂度检测情况进行重构。...但是从长期看,低圈复杂度的代码具有更佳的可读性、扩展性和可维护性。同时你的编码能力随着设计模式的实战运用也会得到相应的提升。 2. 圈复杂度度量标准 那圈复杂度,是如何衡量代码的复杂程度的?...而假设你的业务十分复杂,而且涉及到多个其他的微服务系统调用,再加上各种业务中的corner case的判断,圈复杂度上100可能都不在话下。...所以我把如何降低圈复杂度的方法总结成了一句话那就是——“尽量减少节点判定法中节点的数量”。 换成大白话来说就是,尽量少写if、else、while、case这些流程控制语句。...3.2 少写流程控制语句 这里举个特别简单的例子。 其实可以直接优化成下面这个样子。 例子就先举到这里,其实你也发现,其实就像我上面说的一样,其目的就是为了减少if等流程控制语句。
代码圈复杂度优化 什么是圈复杂度 圈复杂度就是可以用来衡量一个模块判定结构的复杂程度,数量上表现为独立线性路径条数。...举一个最简单的例子,一个函数有 if else 语句,这个时候,执行这个函数就需要两条路径来执行,一个是 if 另一个是 else,那么,这个函数的圈复杂度就为 2 。...圈复杂度也是衡量一个项目的代码质量,在大型的项目中,对圈复杂度也是有一定的要求,超出了这个标准可能就会出现告警状态,所以,圈复杂度是需要每个开发者重视的。...圈复杂度常用优化类型 算法优化 表达式逻辑优化 大函数拆小函数 圈复杂度优化对比 减少不必要的分支 以下是 if else 语句的一个写法,其实只要不是一个新手,一般都不会写出下面这样的代码,但还是拿这个来做个例子...表达式逻辑优化 表达式逻辑计算的增加也会增加圈复杂度,优化一些结构复杂的逻辑表达式,也能在一定程度上降低圈复杂度。
所以圈复杂度的多少决定于代码中有多少流程控制语句,包括但不限于if、else if、for、while、switch、||、&&等等。...为何要解决高圈复杂度 ▼ 圈复杂度是函数中独立执行路径的数量。高圈复杂度的函数意味着逻辑结构复杂,代码可理解性低、可维护性低。...测试人员难以编写足够的测试用例覆盖所有情况,导致需要投入大量人力成本进行测试和维护。 研究发现,圈复杂度和缺陷个数有高度的正相关:圈复杂度最高的模块及方法,其中的缺陷个数也最多。...我们可以根据圈复杂度的高低来推测一个模块缺陷的多少。...使用扫描说明 ▼ 新建分析方案时,会默认勾选圈复杂度扫描功能 也可以在方案页面中度量配置里,调整圈复杂度的启用和阈值 项目扫描完成之后,便可在项目分析页面下的圈复杂度内,看得到结果。
相信大家都对圈复杂度这个概念很是熟悉,本文来和大家聊聊逻辑的圈复杂度。代码优化里面,一个关注的重点在于代码的逻辑复杂度。一段代码的逻辑复杂度越高,那么维护起来的难度也就越大。...衡量代码的逻辑复杂度的一个维度是通过逻辑圈复杂度进行衡量。...代码的可维护是需要综合考虑多个维度的,虽然说降低逻辑的圈复杂度基本上都是属于正确的事情,但由于实际项目遇到的情况比较特殊,还请识别主次矛盾,不要强行优化 逻辑的圈复杂度是指在代码执行过程中,逻辑上形成的圈的数量...原始的逻辑设计抽象起来如下图 从逻辑上看,以上的逻辑设计是存在很多个圈圈的,相当于不停的拆分、聚合,每一次都是在增加逻辑圈复杂度,这样的逻辑设计对应到代码里面,大概就是一堆 if 或者 switch...这时执行逻辑可能需要跨越多个类型,那逻辑复杂度也会上来 假定有如下图的逻辑,需要按照顺序或者是执行时间,分别调用方法1到6来完成业务端的任务。
从设计稿出发,提升页面搭建效率,亟需解决的核心问题有: 2.1 圈复杂度 圈复杂度(Cyclomatic complexity,简写CC)也称为条件复杂度,是一种代码复杂度的衡量标准。...程序的可能错误和高的圈复杂度有着很大关系。 2.2 圈复杂度计算方式 常用结构圈复杂度计算: 1. 顺序结构:顺序结构复杂度为1。...4. return:增加一条return语句,复杂度将加1。...此时就可以选择把圈复杂度的重构阈值设定为10。 假设业务十分复杂,而且涉及到多个其他的微服务系统调用,再加上各种业务中的corner case的判断,圈复杂度上100都是可能的。...匹配任何单个字符,“/folder/*”递归地排除文件夹中的所有内容。可以指定多个模式。不要忘了在模式周围加“”号。
注意:圈复杂度计算中,计算变量是连通分量,而不是强连通分量! 判定法 上面通过公式来计算圈复杂度,似乎有点太过麻烦,计算边、节点、连通分量,都要费不少劲! 有没有更加粗暴简单的方法呢?...当程序遇到这些判定条件时,圈复杂度在原有基础上加 1 即可; if 语句 while 语句 for 语句 case 语句 catch 语句 and 和 or 布尔操作 ?...: 三元运算符 接着以上节程序控制图为例,正常顺序的圈复杂度为 1,遇到 for 循环 +1,然后遇到 if 语句,再 +1 ,最后结果为 3; 怎样,是不是够粗暴简单?...判定法用于简单程序的圈复杂度计算还是很有效果的; 需要注意的是:对于多分支的 case 结构或多个 if - else 结构,必须统计全部实际的判定条件数; ---- 圈复杂度是评判代码优劣的标准之一,...降低圈复杂度大致有如下方法: 简化、合并条件表达式 将条件判定提炼出独立函数 将大函数拆成小函数 以明确函数取代参数 替换算法 从先计算后降低圈复杂度的角度来优化代码,使代码更加易读、易扩展、易维护,这就叫
,本文的主角 圈复杂度 重磅登场,本文将从圈复杂度原理出发,介绍圈复杂度的计算方法、如何降低代码的圈复杂度,如何获取圈复杂度,以及圈复杂度在公司项目的实践应用。...圈复杂度 2.1 定义 圈复杂度 (Cyclomatic complexity) 是一种代码复杂度的衡量标准,也称为条件复杂度或循环复杂度,它可以用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数...圈复杂度 在 1976 年由 Thomas J. McCabe, Sr. 提出。 圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和维护。程序的可能错误和高的圈复杂度有着很大关系。...result : result;} 上面的代码中一共有 1个 if语句,一个 for循环,两个 case语句,一个三元运算符,所以代码复杂度为 4+1+1=6。...圈复杂度检测方法 5.1 eslint规则 eslint提供了检测代码圈复杂度的 rules: 我们将开启 rules 中的 complexity 规则,并将圈复杂度大于 0 的代码的 rule severity
但是我们编写了大量嵌套的if语句,这使得我们的代码更加复杂和难以维护。 接下来,让我们探索如何简化代码的中的ifelse语句写法。...此外,当存在复杂条件时,switch语句不适合。 拥有嵌套决策结构的另一个副作用是它们变得难以管理。例如,如果我们需要添加一个新的运算符,我们必须添加一个新的if语句并实现该操作。...使用枚举 除了使用Map之外,我们还可以使用Enum来标记特定的业务逻辑。之后,我们可以在嵌套的if语句或switch case 语句中使用它们。...我们还可以设计一个Calculator#calculate方法来接受可以在输入上执行的命令。这将是替换嵌套if语句的另一种方法。...语句的替代方案,具体用哪一种可以根据你的实际业务场景来决定。
又如: update xxxx_xxxx set xxx_type= CASE WHEN xxx_type = '0' THEN 'Y...
本次主要是聊聊关于使用接口抽象和降低圈复杂度的方式 工作中,难免会遇到老项目老代码,不仅仅需要我们维护,可能还需要我们在原来的垃圾代码上进行新增功能或者是进行优化调整 例如 现有的老代码中关于用户系统这一块就已经经是摇摇欲坠...尽可能降低圈复杂度 圈复杂度也可以理解为条件复杂度,是一种用来衡量代码复杂度的标准 例如一些没有判断语句的代码,圈复杂度就是 1 如果是 if...else 那么圈复杂度就是 2 ,简单的就可以理解为涉及到判断条件的数量...4 ,其中有 3 个判断条件和一个默认的正常顺序,因此是 3 +1 = 4 这个时候,我们可以如何降低圈复杂度呢?...op.ValidateTenantInfo() ... } 这种方式,是不是就可以将圈复杂度降低到 1 了呢?...而且看起来也优雅了很多 总结 主要叮嘱了我们维护和开发的时候,要重视封装,重视抽象,重视降低圈复杂度 只要你用心去打磨,自然会变得越来越好 但是可别生搬硬套,毕竟一些定制化的需求,定制化的代码你去做接口抽象是没有啥意义的
concat( if(t2.`flow_flag`=1 and t1.`field_source`= '06','支付宝账号1',''), if(t2.`flo...
Tencent/CodeAnalysis 国内镜像:https://git.code.tencent.com/Tencent_Open_Source/CodeAnalysis 背景介绍 ▼ 高圈复杂度的函数通常意味着代码逻辑复杂...简化条件表达式 ▼ 每个条件表达式,都可以是为一条新的可独立执行路径,精简条件表达式能有效降低圈复杂度。 逆向表达 可以简化和减少条件表达式的数量。...通过翻转原始条件表达式中的逻辑操作符得到简化后的表达式。但需谨慎考虑逻辑正确性。 例子 分解条件 将复杂条件语句拆分为独立函数的技术,提高代码可读性和可维护性。...合并条件 将多个判断合并为一个条件式,再提炼为独立函数,减少重复代码,增加代码复用性。...圈复杂度功能扫描介绍详情 腾讯云代码分析,公众号:腾讯云静态分析腾讯代码分析-圈复杂度扫描功能 关注我们, 持续为您的代码助力!
print('你输入的日期是%d年的第%d天。'
问题 对于select语句,我们可以通过join/outer join来关联多个表;但是对于update语句,是不能直接通过join/outer join来关联多表数据的,这里仅针对PostgreSQL...,本意是a、b、c三表关联,当c的value是’test’且a的key也是’test’的时候,就将a的value也改为’test’。...但实际上这个sql有大问题,这里的join和where条件并没有意义,一旦update成功,你会发现,a表内的所有数据的value都被改成了’test’!!...PostgreSQL中正确的多表关联update写法 在update语句中不应该通过join来进行多表关联,而是要通过from来多表关联,如下: 1 2 3 4 5 6 7 8 update a set...另外补充一句,对于set xxx = 'xxx'这个update的部分,是不可以在column字段前加上表前缀的,比如下边的写法就是有语法错误的: 1 2 update a set a.value =
在读《流畅的Python》时,偶然看到下面的语句: with urlopen(URL) as remote, open(JSON, 'wb') as local: local.write(remote.read...()) 突然才发现,原来多个with语句可以写到一起!...这样写每个with语句需要缩进一次,阅读起来逻辑不连续,而且很容易超过每行的字符限制,导致需要换行等问题,不是很方便。...经过这个偶然的发现,以后上面的代码可以这样写了: with open('in_file') as f, open('out_file' 'w') as of: for line in f:...同时看 with 语句的官方文档,发现从Python 3.10版本起,还可以用括号将多个with语句括起来: with ( open("face_model_choice.txt") as f,
大家好,又见面了,我是你们的朋友全栈君。 python的if语句为条件判断语句,习惯与else搭配使用。...if 结构允许程序做出选择,并根据不同的情况执行不同的操作 if的用法 1.只有 if 进行判断desserts = [‘ice cream’, ‘chocolate’, ‘apple crisp’,...) 3. if – elif – else 进行判断,其中 elif 不是唯一的,可以根据需要添加,实现更细粒度的判断# 对不同的 dessert 输出不完全相同的结果 for dessert in desserts...print(“I hate %s.” % dessert) # 当前值不符合上面所有的判断条件,就执行 else 里的语句 # 当然如果这个else 不需要的话,可以不写 else: print(“I...like %s.” % dessert) 值得注意的一点是:当整个 if 判断满足某一个判断条件时,就不会再继续判断该判断条件之后的判断 4.特殊的判断条件if 0: # 其他数字都返回 True print
大家好,又见面了,我是你们的朋友全栈君。 1、场景:由于多次循环执行数据库操作是非常耗费性能的。因此,我们需要尽可能一条UPDATE语句更新多条数据。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
将需要去重的字段添加到where条件中,取出唯一id 然后就可以获得去重之后的两个字段了 不过我这边是你需要去重一个字段,展示两个字段的情况 # 注意 有很多朋友问...,group by是可以对多字段进行去重的,但是我这里为什么还说不行呢?...我在这里统一描述下 由于时间比较早了,我大概记得当时的场景是:对一个字段进行去重,而需要取两个字段,这样的写法如下 select A,B from table group by A 但是group...by是不支持这种写法的,因为group by 和 select 中的字段必须保持一致 当前注意事项写于:2022年6月27日18:24:10 还可以看如下文章 Group_concat介绍与例子..._HashMap黑龙江分Map的博客-CSDN博客_group_concat mysql去重的最方便的两种方法_承影v的博客-CSDN博客_mysql去重 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人
领取专属 10元无门槛券
手把手带您无忧上云