none
为什么要尽可能少用if else RRS feed

  • 问题

  • 看到很多国内论坛上很多人在讨论使用各种方法代替if else 逻辑,以前只是觉得用switch case代替一部分if else ,把处理的过程放在不同的函数里,这样逻辑结构显得清晰一点,但似乎没必要彻底不用if else吧,而且很多人贴同样的代码(估计是直接复制粘贴的,都没仔细看过),说是去掉了if else,但仔细研究一看,根本就是不对的,比如http://blog.csdn.net/yanhongsan/archive/2008/11/19/3335184.aspx里的例子,有一个根本的问题没解决,如何判断是使用CEvent1还是CEvent2,至于大量使用if else 的问题会导致结构不清晰的问题,我想只要里面没有复杂的业务逻辑,应该不存在结构不清晰的情况吧,通过if else if else 结构,分析出不同的情况,然后使用不同方法处理,在处理方法中,还可以使用更细的分支,只要有注释,顺着逻辑走下去,也没什么问题吧,相反,弄一堆对象来处理,虽然看起来if else 少了,但理解起来可能更麻烦了,不知道我说的对不对,欢迎对这方面有研究的朋友指正。
    2010年12月31日 3:18

答案

  • 您好,关于这方面的信息据我所知最早出现在Martin Flower的《重构-改善既有代码》中,在第9章简化条件表达式中有详细的介绍。

    因为if等条件式的代码编写地方是复杂情况滋长的地方,所以《重构》中给出了应对各种复杂if条件的方案。

    我个人是在开发框架中经常使用这些方案,以面向对象的设计模式来替代if,以获得框架的高可扩展性。

    但话又说回来了,凡事无绝对。我认为如果if代码够简单,够清晰,if中判断的情况也不会经常发生变化,是没有必要去替换的。

    设计模式中的思想也是为了应对未来不断发生的变化,如果其本身就不变化,其本身就简单,那又何必化简为繁。

    仅供参考。

    2010年12月31日 6:25
    版主

全部回复

  • 如果用vb.net我几乎全部用 select case ...,但是用c#我几乎全部用if else。原因是vb.net的case非常灵活而c#的case非常不灵活。

    2010年12月31日 6:21
  • 您好,关于这方面的信息据我所知最早出现在Martin Flower的《重构-改善既有代码》中,在第9章简化条件表达式中有详细的介绍。

    因为if等条件式的代码编写地方是复杂情况滋长的地方,所以《重构》中给出了应对各种复杂if条件的方案。

    我个人是在开发框架中经常使用这些方案,以面向对象的设计模式来替代if,以获得框架的高可扩展性。

    但话又说回来了,凡事无绝对。我认为如果if代码够简单,够清晰,if中判断的情况也不会经常发生变化,是没有必要去替换的。

    设计模式中的思想也是为了应对未来不断发生的变化,如果其本身就不变化,其本身就简单,那又何必化简为繁。

    仅供参考。

    2010年12月31日 6:25
    版主
  • if else 会显得代码过于冗余且不易理解,通常会用委托来做一些代替 switch case 和 if else 是两种不同的功能 if 用于进行bool判断 switch一般用于等值判断
    2011年1月1日 3:57
    版主