知识大全 过多if-else分支的优化

Posted

篇首语:成家后,你要明白,你赚钱的速度不仅要快于你花钱的速度,还要快于父母变老的速度。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 过多if-else分支的优化相关的知识,希望对你有一定的参考价值。

  我想谈一谈这个话题是因为我的上一篇博客有一些朋友回复 说if else过多的分支可以使用switch或者责任链模式等等方式来优化 确实 这是一个小问题 不过我们还是可以整理一下这个小问题的重构方式

>

  为什么要优化?

  你没有看错 这是要放在第一条谈论的

  有许多人会说 叠起来一堆if else分支 代码就不优雅了 可是 怎样去定义 优雅 的概念呢?再退一步说 即便不 优雅 又有什么问题?

  对于这样一段再普通不过的代码

  int code;

  if( Name equals(str))

  code = ;

  else if( Age equals(str))

  code = ;

  else if( Address equals(str))

  code = ;

  

  可以有好多种重构方式 但是使用这样的代码 虽然简陋 但在大多数情况下 并不会影响什么 比如 对可维护性没有影响 当然 如果你发现其中确有不好的一面 那就要考虑重构它 换言之 通常你首先要说出某段代码的问题(比如 你觉得这段代码不符合开闭原则 因为你希望保持这段代码闭合稳定) 那么才去存在重构的必要 而不要总是使用 优雅 和 简洁 搪塞疑问 几乎所有的书上都说要写出优雅的 简洁的代码 这本身无可厚非 但是事物需要使用自己的判断 可不要被习惯性地洗了脑

  在我前一家公司 是典型的通讯和传统软件的公司 代码质量普遍不错 但是很多时候 会看到许许多多不够优雅的代码——也许你觉得不够简洁 美观 但是下代码严谨 清晰 我觉得这就很好 反之 某一些精巧的设计 可能会带来可阅读性和可理解性下降的问题

  寻找代替分支判断的方式

  接下去我们再来考虑怎么样去重构优化过多的if else分支

  程序逻辑最基本的组成就是分支 判断和循环 而过多if else正是由于在某一个变化的点上 有许多判断条件和结果分支造成的 所以最基本的解决办法就是把多个判断条件合成一个 也就是把若干个分支合成一个

  但是在大多数情况下 条件判断的分支都是无法合并的 所以 我们需要把这个变化点通过别的途径封装起来 而不是采用if else

   用一个Map可以做到 if else的变化点使用Map的get方法来代替

  Map typeCodeMap = new HashMap();

  typeCodeMap put( Name );

  typeCodeMap put( Age );

  typeCodeMap put( Address );

  

  int code = typeCode get(type);

   枚举

  public enum Codes

  Name( ) Age( ) Address( );

  public int code;

  Codes(int code)

  de = code;

  

  

  //使用

  int code = Codes valueOf(de;

   多态

  ICode iCode = (ICode)Class forName( xxx + str) newInstance();

  int code = iCode getCode();

  当然 如果仅考虑从String转向int这样的转换 用这样的方式来简化分支判断逻辑 这个方式 这个例子不是很恰当 当然 这样的方式经常被用来做从字符串到具体对象的转换

  还有一些朋友说的这个模式那个模式来解决多if else的问题 这些都是正确的 当然本质上也无一例外基于多态来实现的 所以我就不提及了 这些都不错 至少比那些老说用switch来代替if else的有价值多了 :)

cha138/Article/program/Java/hx/201311/26892

相关参考

保险代理分支机构设立条件

保险代理分支机构设立条件保险代理机构设立1年内,可以设立3家保险代理分支机构。申请设立保险代理分支机构应当具备下列条件:(1)申请前1年内无严重违法、违规行为;(2)内控制度健全;(3)拟任主要负责人

我公司想在西部地区开设分支机构,请问该分支机构的企业所得税税率是否可以采用15%?

根据《关于深入实施西部大开发战略有关企业所得税问题的公告》(公告2012年第12号)规定,总机构设在西部大开发税收优惠地区外的企业,其在优惠地区内设立的分支机构(不含仅在优惠地区内设立的三级以下分支机

保险公司分支机构的特点

保险公司分支机构的特点保险公司的分支机构具有以下特点:①没有独立于保险公司的名称。分支机构的名称前都要冠以本公司的名称,且须标明是该公司的分公司、支公司或办事处。例如平安保险公司广州市分公司天河区办事

内资分支机构新户办理税务登记应该提供哪些证件资料?

内资分支机构新户办理税务登记应该提供下列证件资料:  分支机构营业执照副本复印件,加盖公章并注明与原件无误  分支机构的法人代表(负责人)、财务负责人、发票管理员(办税员)身份证复印件  分支机构企业

正中、尺、桡神经在肘部的第一个分支?

正中神经在肘部的第一个分支为旋前圆肌支以及桡侧腕伸肌支。  尺神经在肘部第一个分支为尺侧腕屈肌支。  桡神经在肘部第一个分支为肱桡肌支及桡侧腕长伸肌支。

境内总机构支付给境外分支机构利息,如何率缴税?

境内的银行,在境外有分支机构,总分支机构之间有资金的拆借,因此总机构应该支付给境外分支机构利息,应该依据什么税率缴税?另外,《国家税务总局关于境外分行取得来源于境内利息所得扣缴企业所得税问题的通知》(

知识大全 分支机构与法人区别

分支机构与法人区别首先你要理解法人资格,所谓的法人资格,就是法律上可以把你认为是一个独立的主体分支机构不具有法人资格,不能自负盈亏,不能独立对外承担债务等,这些都要通过有法人资格的总公司比如说,如果只

保险公司分支机构设立的程序

保险公司分支机构设立的程序保险公司设立分支机构,首先应当提交正式的申请报告。申请报告内容主要包括:业务经营范围、3年业务发展规划和市场分析、筹建负责人、计算机设备方案及拟定的办公地点等。中国保监会在接

二级分支机构需要具备哪些实体条件?

《国家税务总局关于建筑企业所得税征管有关问题的通知》(国税函[2010]39号)中第二条关于二级分支机构;以及《跨地区经营汇总纳税企业所得税征收管理暂行办法》第九条关于二级分支机构释义中,税务机关和纳

企业的分支机构应在何地缴纳增值税?

某企业是增值税纳税人,总机构在北京市朝阳区,由于经营需要,在海淀区设立了一个独立核算的分支机构,并且以分支机构的名义对外经营业务,该企业的分支机构应在何地缴纳增值税?能否汇总到总机构一并缴纳?  根据