去除IF语句

崔钢 发布于 2011/07/14 08:42
阅读 918
收藏 1

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

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

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

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

加载中
0
ddatsh
ddatsh
其实还好,ECLIPSE 本身 就很容易找到逻辑块 加上EDITBOX 插件,就更直观了 一个类里几千行代码 小意思
烈冰
烈冰
刚试用了这个插件,不错
0
苦行瓜
苦行瓜

超过3个判断的话,我就考虑用swicth了。

0
叫我蝴蝶吧
叫我蝴蝶吧
超过3个判断,要是String的话,对象的话,你也考虑用switch??
0
叫我蝴蝶吧
叫我蝴蝶吧
当然我用的是JDK6
0
崔钢
崔钢
我再补充一下。如果使用枚举+case语句。那么要注意枚举所表示的状态。它应该在整个系统中是一致的。否则。。。。
0
xyz555
xyz555

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

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

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

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

0
清凌渡
清凌渡
java7 增加了switch判断字符型数据的功能 。。
xyz555
xyz555
java 7离形成标准还有很长路要走。
ddatsh
ddatsh
目前不会有太多人用JAVA7的
0
钛元素
钛元素

if(1==1)

{

    print("哦米拖佛!");

}

0
sunyh
sunyh

引用来自“钛元素”的答案

if(1==1)

{

    print("哦米拖佛!");

}

顶  系统中太多这样的代码了。
0
hizhengfu
hizhengfu
editbox果然不错。比起来还是idea比较好用,代码折叠什么的相当方便。
返回顶部
顶部