您的位置:首页 > 编程语言

代码中如何避免过多的if else

2010-12-23 15:55 435 查看
在开发中 if else 实在是多啊
刚敲完代码,看了下 又发现N多个 if else啊
希望大家给个好的建议啊

--------

use pattern, such as chain of responsibility

--------

enum

--------

我是来接分的,不可避免的逻辑判断,该写的还得写

--------

楼上的。用枚举的话不是还得if判断枚举值的情况么?

这个看业务需求了。如果业务的条件本来就多。我觉得难免会多。

--------

1、能用条件三元运算符的时候尽量用,但是业务逻辑可能会看不清晰

2、能用switch的时候尽量用

3、多用if{ return; }...if{ return; }...结构,或者while(true) { if { break; }...if { break; }...break; }结构(用于不方便退出整个方法的时候,但有死循环风险,代码习惯好的可以用),分支条件清晰,多层嵌套if...else...最容易犯错误

4、尽量分拆方法,让if...else...里面只有一句方法调用,逻辑也清晰

目前采用的就这么多,楼主可以参考一下。

--------

枚举可以有自己的方法,而且每个方法的实现可以不同,当然枚举不是万能的,不过也能解决一部分问题

使用switch或者enum,如果项目很大或者涉及到系统的合理性来说,使用设计模式也是很不错的选择,比如说责任链设计模式:http://4ujava.javaeye.com/blog/547166

--------

逻辑重要,没有办法的事情 if()else if()

--------

是swing还是web哦....

--------

如果想把所有的if else逻辑都提取出来,可以考虑用规则引擎

iLog,drools这些就是来把复杂的业务逻辑通过配置文件的方式提取出来,以后改甚至加新的业务逻辑不用更改代码了,改配置文件即可

--------

不用if else的话就只能用if return……

--------

我知道的避免ifelse的方法:
第一种是表驱动法:就是一开始就把所有的可能的数据都存放起来
第二种是用状态/策略模式
具体采取什么办法,就是看你要实现的功能了....

--------

为什么不喜欢if-else呢。。。

一般的话,多用while 来代替if 语句,尤其是当有很多if 语句的时候

if语句相对while 语句来看,存在一定的缺陷..所以建议考虑多使用while语句.

--------

if else 很常用啊,为什么要不用if else呢? 总是要做布尔运算的么
如果说,因为if else 很多,可以考虑用 监听者 模式, 把逻辑判断放到若干个监听者里,每个监听者处理一种情况,有数据进来就给所有的监听者,直到有人处理为止

本质上还是要用if else

关键看你的目的了

--------

用swith

--------

用 a?b:c 的格式,功能相当于if-else,格式上简单一些,推荐~~

if

return

试试


--------

if
return

switch
case

--------

用switch,不过java的switch好像只支持int和char

还有可以用离散数学里的关系运算把条件化简或结合

--------

使用switch或者enum,如果项目很大或者涉及到系统的合理性来说,使用设计模式也是很不错的选择,比如说责任链设计模式:http://4ujava.javaeye.com/blog/547166
责任链设计模式是不是把if else封装起来了,不是太明白,呵呵,初学。还有头像很不错。

如果怕if else嵌套多了会混乱,除了用模式这些方法外,我觉得可以把条件里的逻辑写成一个个小的private方法,如下:

Java code
if (a) {

doA();

} else if (b) {

doB();

} else {

doC();

}

doA() {}
doB() {}
doC() {}


这样看上去思路会稍微清晰一点,希望对你有帮助。Good Luck!

--------

这个有可能吗?
没有If,这世界会怎么样?

--------

合理的业务规划,实在要用就用。何必计较这个

-------

合理的业务规划,实在要用就用。何必计较这个

有些人 比较 眼里 看不见这些沙子 啊
不过写代码就应该 追求 尽量的 短小精悍啊
结构优美

--------

use pattern, such as chain of responsibility

嗯 正在苦学模式啊

--------

就是看的有点烦啊
if else if if else 感觉这样写代码和在学校还是一样的
看起来就是不爽啊

--------

不用 if else 我可能就不会写程序了

--------

以论坛帖子为例子,如ForumMessage是一个模型,但是实际中帖子分两种性质:主题贴(第一个根贴)和回帖(回以前帖子的帖子),这里有一个朴素的解决方案:
建立一个ForumMessage,然后在ForumMessage加入isTopic这样判断语句,注意,你这里一个简单属性的判断引入,可能导致你的程序其他地方到处存在if else 的判断。
  如果我们改用另外一种分析实现思路,以对象化概念看待,实际中有主题贴和回帖,就是两种对象,但是这两种对象大部分是一致的,因此,我将ForumMessage设为表达主题贴;然后创建一个继承ForumMessage的子类ForumMessageReply作为回帖,这样,我在程序地方,如Service中,我已经确定这个Model是回帖了,我就直接下溯为ForumMessageReply即可,这个有点类似向Collection放入对象和取出时的强制类型转换。通过这个手段我消灭了以后程序中if else的判断语句出现可能。
--------

如何是具體的值,可以用swith(){ case:
//.....
break;}
代替

---------

将if else用在小地方还可以,如简单的数值判断;在实现业务功能时一般使用设计模式解决。如果你做了不少系统,很久没有使用if else了,那么说明你可能真正进入OO设计的境地了。

--------

纯属个人习惯问题,在写代码的时候,把IF ELSE 对齐就没这问题了

--------

曾经听人说过,如果你的代码中,有很多的if...else的话,说明你的代码面向对象不好!或许是认识肤浅吧,我还是认为if和else都是逻辑判断必须的!楼上有几位兄弟说的,用switch替换,个人和if一样的!没有什么本质的区别!

--------

该用的时候还是得用!~

--------

重构到状态模式。

--------

你可以贴段你的代码出来让大家给你优化下 实际上有些时候由于条件的重复判断的确会出现很多该死的if else组合 写的时候就那么写吧 当你写完的时候我希望你能换个角度 看看自己写的这段代码严谨不严谨

--------

在项目中是的少用点if else但是有时得用还是用点。逻辑问题的时候。但是可以使用设计模式试试规划下。最主要的是要结构清晰。

--------

曾经听人说过,如果你的代码中,有很多的if...else的话,说明你的代码面向对象不好!或许是认识肤浅吧,我还是认为if和else都是逻辑判断必须的!楼上有几位兄弟说的,用switch替换,个人和if一样的!没有什么本质的区别!

是啊 代码写了几年了啊 工作2年了啊 可发现代码还是if else啊 看起来很不爽 啊
气愤啊 大家有好的方法再说说吧 分可以再加的

--------

善于用return;
一些if语句可以不需要else。一些if语句 判断完成立,可直接返回,无需向下走。
其实if else 是别的语言无可替代的,你有时候还必须得用。
我记得switch case 好像只能用int类型作为参数的?
--------

善于用return;
一些if语句可以不需要else。一些if语句 判断完成立,可直接返回,无需向下走。
其实if else 是别的语言无可替代的,你有时候还必须得用。
我记得switch case 好像只能用int类型作为参数的?

int 和 char
--------

能用switch的时候不用if...else啊,效率高些嘛!

--------

不建议使用过多的if else ,switch. 因为可扩展性差,而且难维护.

可以尝试用多态

--------

Java code
package com.csdn;

interface Animal {
void speak();
}

class Dog implements Animal {
@Override
public void speak() {
System.out.println("dog speak.");
}
}

class Cat implements Animal {
@Override
public void speak() {
System.out.println("cat speak.");
}
}

class Pig implements Animal {
@Override
public void speak() {
System.out.println("pig speak.");
}
}

public class NoIfElse {
// 比方说现在有个需求,
// 通过state状态来判断那种动物叫
// 0让狗叫,1让猫叫,2让猪叫

/**
* 方法1
*/
private void animalSpeak(int state) {
Animal[] animals = { new Dog(), new Cat(), new Pig() };
animals[state].speak();
}

/**
* 方法2,没有用到Animal接口
*/
private void animalSpeak2(int state) {
if (state == 0) {
new Dog().speak();
}
if (state == 1) {
new Cat().speak();
}
if (state == 2) {
new Pig().speak();
}
}

public static void main(String[] args) {
NoIfElse t = new NoIfElse();
int state = 1;

t.animalSpeak(state);

t.animalSpeak2(state);
}
}


LZ比较下方法1和方法2

--------

条件判断无法避免的, 充其量只是换下形式而已.!
if else 无所谓.! 但是尽量不要嵌套, 嵌套多了把你自己都套晕了的
LS的说的if return是个比较好避免嵌套的解决方案!

--------

一定是业务逻辑的问题。!。。可能是业务逻辑设计的不够合理。。~!

--------

设计模式:
switch 用Adapter

设计模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: