12
回答
去除IF语句
注册华为云得mate10,2.9折抢先购!>>>   

if语句是一个很古老的东西,对我而言,我最早学习的BASIC语言中,就有他的面孔。我相信,任何一门高级语言中一定都会有if语句的存在。当然,它也是一种简单的逻辑结构,非常容易掌握,哪怕对于只有13岁的孩子来说,也是一样。

关于去除if语句已经不是什么新鲜的话题了。在我学习并掌握面向对象开发的时候,就看过很多的讨论,关于如何用多态特性来消除if语句的。这种机制比较复杂,大体上来说,是一种策略模式的实现。如果你的面对的业务复杂到一定程度上,你就要考虑采用这种方式来实现了。

if语句本身没有什么问题,但是使用很有问题。我认为,简单的条件逻辑下才考虑使用if语句。如果你的业务牵扯需要判断大量的状态,和状态分支,我建议你采用switch语句。虽然说java的switch语句能力比较弱,不能跟SCALA中的模式匹配比较,但是如果和java的枚举结合起来使用,其实也还凑合,至少比if语句要好。switch语句本身其实和if else语句是等价的,这个大家都知道。使用switch语句的另一个好处是,你必须标明状态,因此在别人阅读的时候,就很清晰的可以选择他所需要注意的分支;而使用if语句的话,阅读者可能会在头晕眼花之后放弃你的程序,重写一段自己的逻辑,当然也会以if语句开头(不要说你没有这么干过)。因此if语句的膨胀就是必然的了。最后程序中往往会出现一个巨大的if语句结构,让人望而生畏。

在一段程序中,没有什么比一个多大三五百行的拥有大量分支的if语句更影响阅读的了。毕竟程序是写给人看的。

举报
崔钢
发帖于7年前 12回/850阅
共有12个评论 最后回答: 7年前
其实还好,ECLIPSE 本身 就很容易找到逻辑块 加上EDITBOX 插件,就更直观了 一个类里几千行代码 小意思
--- 共有 1 条评论 ---
烈冰刚试用了这个插件,不错 7年前 回复
我再补充一下。如果使用枚举+case语句。那么要注意枚举所表示的状态。它应该在整个系统中是一致的。否则。。。。

在很多弱类型的语句if...else if...else if...与switch可能是等价的

但是像类似java这样的强类型的语言就不等价了。

Java里switch只能用于判断int型的数据。

有的观点恰好与楼主观点相反。是不主张使用switch的。主要是switch的运行效率低,也有人认为switch难以阅读。

顶部