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

程序中减少使用if语句方法集锦

解决方案: 将这个方法拆分成两个新方法,然后if就不见了。 ? 模式2:使用多态(Polymorphism) 背景: 根据类型switch时。 ?...问题: 在添加新类型时,我们必须要记得更新switch语句,此外随着不同bird概念添加进来,bird类凝聚力越来越糟。...适用范围:根据类型做单次切换是可行,如果switch太多,在添加新类型时如果忘记更新现有隐藏类型中所有switch,就会导致bug出现。...注意:上例为了简洁只写了一个方法,但在有多个switch时更有用。 ? ? 模式3:NullObject/Optional 背景: 当外部请求理解代码库主要用途时,回答“查一下null情况”。...我在重构代码增进理解时,发现这些方法都很有用。要记得并非所有if语句都是魔鬼,不过现代编程语言还有很多功能值得我们探索并使用。

1.3K20

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。...站在编译器角度,如果对整形变量n进行初始化操作,那么则相当于默认switch..case会跳转到case 1标签下,这显然是一种置case 2和case default于不顾非法行为;如果不进行初始化操作...有没有一种解决方案,既能让我们充分利用C++灵活语法规定(在switch..case结构内部也可以定义局部变量),又能够让我们保持定义局部变量后立即初始化良好习惯,而且还不让编译器为难(报错)呢?

1.9K30
您找到你想要的搜索结果了吗?
是的
没有找到

读《代码不朽:编写可维护软件10大要则》C#

如何使用本原则 拆分重构方式有提取方法和将方法替换为方法对象。 提取方法很容易理解,即从一个函数中提取一段代码,写成一个新方法。...一个重构技巧是将这个方法替换成一个方法对象,将不同局部变量和结果变量作为类成员,然后调用类方法。...编写简单代码单元 这里“简单”体现代码单元分支点,所以这个原则可量化为:限制每个代码单元分支点数量不超过4个。C# 中常见分支点代码就是if和switch语句。...再比如碰到嵌套条件语句,为了使代码简单,可以使用“使用卫语句来代替嵌套条件语句重构技巧,即标识出各种独立情况,并插入return语句来代替嵌套式条件语句。...,然后可以再用“提取方法减少复杂度。

2.1K00

详解圈复杂度

圈复杂度计算方法 点边计算法 圈复杂度计算方法很简单,计算公式为: V(G) = E - N + 2 其中,e表示控制流图中边数量,n表示控制流图中节点数量。 几个节点通过边连接。...下面是典型控制流程,如if-else,While,until和正常流程顺序: 节点判定法 其实,圈复杂度计算还有更直观方法,因为圈复杂度所反映是“判定条件”数量,所以圈复杂度实际上就是等于判定节点数量再加上...1,也即控制流图区域数,对应计算公式为: V (G) = P + 1 其中P为判定节点数,判定节点举例: if语句 while语句 for语句 case语句 catch语句 and和or布尔操作 ?...圈复杂度与CI 在持续集成环境中,可以基于时间变化维度来评估模块或函数复杂度和增长值。如果CC值在不断增长,那么应该开展两项活动: 确保相关测试有效性,减少故障风险。...switch…case…多处重复。对于消息过多情况,可以考虑将消息进行分类,然后采用技巧1进行重构

4.9K30

代码重构之没有理由拒绝Lambda表达式

代码重构之没有理由拒绝Lambda表达式 Lambda表示是在C# 3.0推出新特性,而匿名方法C# 2.0推出新特性,这一切都是为了让代码变得更简洁,更容易理解。...下面就简单说明一下如何使用Lambda表达式来重构代码 Button.Click事件开始 通常写法(C# 1.0) this.button.Click +=new EventHandler...2.0(匿名方法)可以重构成 this.button.Click +=delegate{ throw new NotImplementedException(); };...下面用更加专业手法再重构一下 这次重构目的是为了让这段代码更好被其他人使用我们把他封装一下 public void GetServiceData(Action<IEnumerable<Contact...q.Entities.First(); } }; #endregion 没有理由拒绝Lambda表达式 既可以提高可读性,又能够减少代码数量

67650

提高代码质量:如何编写函数

我们应该让相关语句和操作放在一起,也有利于重构代码。我们修改如下: ? 我们将相关操作放在一起,这样代码看起来更清晰了,而且也更容易重构了。...尽量减少代码嵌套 我们平时写if,switch或for语句是常有的事儿,也一定写过多层if或for语句嵌套情况,如果代码里嵌套超过3层,阅读起来就会非常困难了。...下面我来说说我平时一些减少嵌套技巧或方法。 if语句嵌套问题 多层if语句嵌套是常有的事情,有什么好方法可以减少嵌套呢?...这段代码中,我们把condition1等于false语句提取到前面,直接终止函数,将多层嵌套if语句重构成只有一层if语句,代码也更清晰了。...如果是多层嵌套情况,应该优先减少if语句嵌套 2、不适用if语句switch语句 条件语句一般来说是不可避免,有的时候,我们要判断很多条件就会写很多if-elseif语句,嵌套的话,就更加麻烦了

81620

提高代码质量:如何编写函数

我们应该让相关语句和操作放在一起,也有利于重构代码。我们修改如下: ? 我们将相关操作放在一起,这样代码看起来更清晰了,而且也更容易重构了。...尽量减少代码嵌套 我们平时写if,switch或for语句是常有的事儿,也一定写过多层if或for语句嵌套情况,如果代码里嵌套超过3层,阅读起来就会非常困难了。...下面我来说说我平时一些减少嵌套技巧或方法。 if语句嵌套问题 多层if语句嵌套是常有的事情,有什么好方法可以减少嵌套呢?...这段代码中,我们把condition1等于false语句提取到前面,直接终止函数,将多层嵌套if语句重构成只有一层if语句,代码也更清晰了。...如果是多层嵌套情况,应该优先减少if语句嵌套 2、不适用if语句switch语句 条件语句一般来说是不可避免,有的时候,我们要判断很多条件就会写很多if-elseif语句,嵌套的话,就更加麻烦了

91020

5个技巧让你更好编写 JavaScript(ES6) 中条件语句

2、减少嵌套,提前使用 return 语句 让我们扩展前面的示例,再包含另外两个条件: 如果没有提供水果,抛出错误 接受水果 quantity(数量)参数,如果超过 10,则并打印相关信息。...如果您不介意使用第三方库,有几种方法可以减少空检查: 使用 Lodash get 函数 使用 Facebook 开源 idx 库(需搭配 Babeljs) 注:如果你还不了解 ES6 中 destructure...switch case 语句,根据颜色找出对应水果 switch (color) { case 'red': return ['apple', 'strawberry'];...我们是不是应该禁止使用 switch 语句呢?不要局限于此。就个人而言,我尽可能使用对象字面量,但我不会设置硬规则来阻止使用 switch ,是否使用应该根据你场景而决定。...重构语法 对于上面的示例,我们实际上可以使用 Array.filter 来重构我们代码,以实现相同结果。

1.2K20

.NET(C#) Dapper Oracle(ODP.NET)或SQL Server 执行多条查询(select)语句方法代码

本文主要介绍.NET(C#) Dapper Oracle或SQL server中,在一次数据库连接中,执行多条select查询语句,并且获取到相对应查询结果。...在示例语法中,每个命令由一个换行符分隔,SQL Server将其解释为针对数据库运行多个查询,并将运行每个查询并将结果返回到单独输出中。...OPEN :rslt3 FOR SELECT * FROM returns Where customerid = :id; " + "END;"; 2、执行多条查询(select)语句实现代码...将结果集返回到游标参数,所以需要使用IDynamicParameters集合来指定命令参数。...要添加额外皱纹,Dapper中常规DynamicParameters.Add()方法使用System.Data.DbType作为可选dbType参数,但查询游标参数必须是Oracle.ManagedDataAccess.Client.OracleDbType.RefCursor

2.2K20

C#学习记录

C# 是一个简单、现代、通用、面向对象编程语言,它是由微软(Microsoft)开发。...Class 方法 Class 属性 一个 Main 方法 语句(Statements)& 表达式(Expressions) 注释 C# 文件后缀为 .cs 1.第一个程序 打印出 “Hello...嵌套 if 语句 您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句switch 语句 一个 switch 语句允许测试一个变量等于多个值时情况。...嵌套 switch 语句 您可以在一个 switch 语句内使用另一个 switch 语句。 条件运算符 ? :,可以用来替代 if...else 语句。它一般形式如下 Exp1 ?...循环控制语句 控制语句 描述 break 语句 终止 loop 或 switch 语句,程序流将继续执行紧接着 loop 或 switch 下一条语句

15720

Go语言关键字解析:深入了解Go语言中关键字

比如修复 Switch 语句,加入 import 语句,增加垃圾回收,支持接口等。而这封邮件,也成了 Go 第一版设计初稿。...单从数量上来讲,C#数量是Go5倍之多,这也是Go比C#更简单原因之一。...2.1.2.Switch-case-default Switch-case是一个连用方法,但是case和default这两个关键字在 Go中除了可以和 switch 连用,还可以和select 语句连用...同时Go中默认把 switch 语句一个弊端修复了,即 switch 子句中不用再写 break 了。...除此之外,switch 语句后面出现了一种全新写法:n := "a"; n,这种写法在Go中控制语句(if, else if, switch-case, for)中都可以使用,分号前是变量定义,分号后是定义判断条件

20310

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

重构代码,以适配当前模块设计之初未考虑到多样化场景,并增加模块可维护性、健壮性、可测试性。那么,如何明确重构方向,以及量化重构结果呢?代码圈复杂度可以是一个供选择指标。...它可以用来衡量一个模块判定结构复杂程度,数量上表现为独立现行路径条数,也可理解为覆盖所有的可能情况最少使用测试用例数。圈复杂度大说明程序代码判断逻辑复杂,可能质量低且难于测试和维护。...2. if-else-else、switch-case:每增加一个分支,复杂度增加1,&& 、|| 运算也为一个分支。 3. 循环结构:增加一个循环结构,复杂度增加1。...4. return:增加一条return语句,复杂度将加1。...减少提前return。

26310

C#7.0中有哪些新特性?

在 C#7.0,我们正在加强两个现有的具有模式语言结构: is 表达式现在具有一种右手侧模式,而不仅仅是一种类型 switch 语句 case 语句现在可以使用匹配模式,不只是常数值 在 C#未来版本中... 语句 我们正在归纳 Switch 语句: 可以设定任何类型 Switch 语句(不只是原始类型) 模式可以用在 case 语句中 Case 语句可以有特殊条件 下面是一个简单例子: switch...switch 语句,有几点需要注意: Case 语句顺序现在变得重要:就像 catch 语句一样,case 语句范围现在可以相交,第一个匹配上会被选中。...默认语句还是最后被判断:尽管 null case 语句在最后语句之前出现,它也会在默认语句被选中之前被测试。这是与现有 Switch 语义兼容。然而,好做法通常会将默认语句放到最后。...建立它是为了防止异步运行结果在等待时已可用情境下,对 Task 进行分配。对于许多实例中设计缓冲异步场景,这可以大大减少分配数量并显著地提升性能。

1.5K80

探索C# 10.0关键新特性

全局 using 语句全局using语句允许开发者在项目级别导入命名空间,从而在整个项目中无需在每个文件顶部显式声明。这有助于减少冗余和提高代码可读性。...Top-level statements(顶级语句)对于简单控制台应用或脚本,可以省略主类并将程序入口点代码直接写在文件顶部,无需定义Program类,无需像之前输出需要定义main方法 class...;优点简化代码:Top-level Statements 可以减少应用程序中冗余代码,使代码更加简洁明了。...提高开发效率:使用 Top-level Statements 可以减少应用程序开发时间,提高开发效率。...不利于代码重构:Top-level Statements 中定义变量无法被其他函数或类使用,可能会影响代码重构4.

21941

C#历来语法特性总结

模式匹配用来测试表达式是否具有某些特征,is表达式、switch语句switch表达式均支持模式匹配,可使用when关键字来指定模式其他规则。...表达式 从C# 8开始,可以使用switch表达式。...switch表达式相较于switch语句改进之处在于: 变量在switch关键字之前; 使用=>替换case :结构; 使用弃元_替换default运算符; 使用表达式替换语句。...顶级语句使主程序更易读,减少了不必要模式:命名空间、class Program和static void Main()。 使用VS创建命令行项目,选择.NET 5及以上版本,就会使用顶级语句。...; global using C# 10添加了global using指令,当关键字global出现在using指令之前时,该using适用于整个项目,这样可以减少每个文件using指令行数。

33640

6个实例详解如何把if-else代码重构成高质量代码

如果使用if-else,说明if分支和else分支重视是同等,但大多数情况并非如此,容易引起误解和理解困难。 是否有好方法优化?如何重构方法肯定是有的。...这个重构手法简单易懂,带来效果也非常明显,能有效地较少if语句减少代码量逻辑上也更加易懂。...比对两个版本,会发现重构版本逻辑清晰,简洁易懂。 和重构前到底有什么区别呢? 最大区别是减少if-else嵌套。...为维持这个原则:合并条件表达式可以有效地减少if语句数目;减少嵌套能减少深层次逻辑; 异常条件先退出自然而然主干流程就是正常流程。...现在回头看看自己代码,犯了哪些典型错误,赶紧运用这些重构方法重构代码吧……

1.1K10

C#----委托和事件(一)

最近在做项目,正在进行重构,之前框架就是纯三层简单调用,外加一些Session,SQLHelper等封装管理类,其他东西,一直也想去抽象,但是奈何能力还有所欠缺,抽象出来东西,被组长狠狠给鄙视了一番...具体框架,后期熟悉了在给大家介绍,现在还是有点懵懵哒。 在跟组长交流时候,组长说让我们多用委托,在之前做项目的时候貌似用到过,不过印象不大,在狠狠恶补下C#一些知识点!...在网上查了一些关于委托和事件资料,委托和事件在.Net Framework中应用还是非常广泛,有的人说,对于接触C#时间不长的人来说较好理解委托和事件并不容易,它们一道门槛儿,过了这个槛儿的人,...委托可以调用多个方法,即一个委托对象可以维护一个可调用方法列表而不是单独一个方法,称为多路广播(多播)。 使用+=和-=运算实现方法增加和减少 为什么用委托?...总结 ---- 委托是一个类,它定义了方法类型,使得可以将方法当作另一个方法参数来进行传递,这种将方法动态地赋给参数做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好可扩展性

1.4K10
领券