0 0

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

if()
{

}
else if()
{
}
else if()
{
}
else if()
{
}
else if()
{
}
else if()
{
}
......
 这的有好几10个。如何对其进行优化。
2012年8月24日 17:01

5个答案 按时间排序 按投票排序

0 0

这种时候我更喜欢使用MAP+反射的方式来避免使用if-else, 比如需要通过传入参数的值,来判断需要执行的操作,我更偏向选择下面的方式:

private static final Map<String, String> optionsMap;

	static {
		optionsMap = new HashMap<String, String>();
		optionsMap.put("delete", "doDeleteCat");
		optionsMap.put("modify", "doModifyCat");
		optionsMap.put("create", "doCreateCat");
		optionsMap.put("addCondMap", "doAddCondMap");
		optionsMap.put("delCondMap", "doDelCondMap");
	}

public void execute(RunData rundata, TemplateContext context) {
		rundata.getModuleInfo().setLayoutTemplate("emptyLayout.vm");
		boolean rs = false;
		String optionMethod = optionsMap.get(rundata.getParameters().getString("option"));
		if (StringUtils.isNotBlank(optionMethod)) {
			try {
				Method method = this.getClass()
						.getMethod(optionMethod, RunData.class);
				rs = (Boolean) method.invoke(this, rundata);
			} catch (Throwable e) {
				this.getLogger().error("invoke method:" + optionMethod + " failure!", e);
			}
		}
		context.put("status", rs ? STATUS_SECCESS : STATUS_FAILURE);
	}
	public boolean doCreateCat(RunData rundata) {
		long parentId = rundata.getParameters().getLong("parent_id", -1L);
		int nsId = rundata.getParameters().getInt("ns_id", -1);
		String catName = rundata.getParameters().getString("cat_name", "");
		return vtdCategoriesAdminAO.createVtdCategory(nsId, parentId, catName);
	}
.....

在这里,即使以后增加操作也只需要改变MAP不需要对调用代码进行任何修改

2012年8月27日 12:26
0 0

这个还是需要if到底是用来判断什么的。

if用来判断值的话,你这种情况可以用switch+enum来替换。

假如是判断对象的话,可以使用状态模式加以解决。

2012年8月24日 18:05
0 0

如果你的if判断条件都是基本类型,那么你可以用switch-case语句代替,但是,这样篇幅也不小。
但是一般出现这种情况,多是业务需求的需要。如果让你在性能优化和业务需求重要性上二者选一的话,估计所有人都会选后者吧。

2012年8月24日 17:32
0 0

看你if 判断的是什么,理论上设计好,应该可以用 switch case 替换掉。

2012年8月24日 17:18
0 0

1、if层次越少越好

if() {
} else if() {
}
看看能不能改成

if() {
    return;
}

if() {
    return;
}


2、提取方法
     把相关的if进行合并 并 提取方法

3、利用好多态替换if else 

4、有没有可能如用enum替换掉有规则的字符串/数字等

2012年8月24日 17:09

相关推荐

    代码中大量的 if else如何优化.doc

    代码中大量的 if else如何优化.doc

    Java利用策略模式优化过多if else代码

    主要介绍了Java利用策略模式优化过多if else代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    详细介绍VisuBasic代码优化总结.docx

    Visual Basic(VB)代码优化是一个涉及多...7. **避免使用Select Case**:`Select Case`在某些情况下可能比`If-Then-Else`慢,尤其是在处理大量条件时。 8. **延迟加载对象**:仅在需要时才创建对象,避免过早初始化。

    java中的控制结构(if,循环)详解

    这里主要是一些if,if else条件语句来控制代码的流程,不必多说。 循环控制结构 for 循环 while 循环 do while循环 1. while和do while while和do while循环相对for比较简单,他们的使用方式和C语言是一样的,...

    ASP.NET的网页代码模型及生命周期

    代码隐藏页模型与单文件页模型不同的是,代码隐藏页模型将事物处理代码都存放在cs文件中,当ASP.NET网页运行的时候,ASP.NET类生成时会先处理cs文件中的代码,再处理.aspx页面中的代码。这种过程被成为代码分离。 ...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    3.1.3 嵌套的if-else语句 107 3.1.4 逻辑运算符和表达式 109 3.1.5 条件运算符 112 3.1.6 switch语句 113 3.1.7 无条件转移 116 3.2 重复执行语句块 117 3.2.1 循环的概念 117 3.2.2 for循环的变体 119 ...

    深入C++ 函数映射的使用详解

    switc case 和 if else if …这2种方式在编码方面确实简单少,但是当分支达到一定数量后,特别是分支内部有嵌套大段代码或者再嵌套分支,代码会显得异常臃肿,十分难以维护,对于if else if 语句过多的分支带来过多...

    汇编语言代 码 风 格(Code style).chm

    首先是大小写的问题,汇编程序中对于指令和寄存器的书写是不分大小写的,但小写代码比大写代码便于阅读,所以程序中的指令和寄存器等要采用小写字母,而用equ伪操作符定义的常量则使用大写,变量和标号使用匈牙利...

    一个进程池的服务器程序

    if (write_pid() ) //避免同时有多个该程序在运行 return -1; if (pipe(fd1) ) { perror("pipe failed"); exit(-1); } if (s_pipe(fd2) ) { perror("pipe failed"); exit(-1); } int port = atoi(argv...

    华为编程开发规范与案例

    近日在CDB并行测试中发现一个问题:我们需要的小区负荷话统结果总是为零,开始还以为小区负荷太小,于是加大短消息下发数量,但还为零,于是在程序中加入测试代码,把收到的数据在BAM上打印出来, 结果打印出来的...

    c#串口测试程序

    new MethodInvoker( //表示一个委托,该委托可执行托管代码中声明为 void 且不接 //受任何参数的任何方法。在对控件的 Invoke 方法进行调用时 //或需要一个简单委托又不想自己定义时可以使用该委托。 delegate ...

    餐厅管理信息系统课程设计

    用_ConnectionPtr指针连接数据库:在CmenuManageSysApp类的BOOL InitInstance()函数中加入以下代码: m_pConnection.CreateInstance("ADODB.Connection"); try { m_pConnection-&gt;ConnectionTimeout = 8; m_...

    Spring.net框架

    我不想过多的去谈抽象类和接口的区别,在后续的例子中我们将使用接口。由于接口在进行“动态代理” 时仍能保持类型信息,而抽象类可能由于代理的原因导致继承关系的“截断”(如MixIn等)。除此之外,对于单继承的C#...

    php 删除cookie和浏览器重定向

    } else { echo “cookie没有找到”; } ?&gt;复制代码 代码如下:&lt;?php setcookie(“username”); //删除cookie ?&gt; 您可能感兴趣的文章:php 删除cookie方法详解在PHP中设置、使用、删除Cookie的解决方法...

    详解React 的几种条件渲染以及选择

    对于一个展示页面来讲, 通常有好几种展示状态(以...当然上面的都是常用的一些方法, 但是也存在着各种问题, 比如条件分支过多的的事时候代码也会越来越乱. 下面提供几种具有普适性的方法 if/else, 三目以及 短路运算符

    基于SpringJDBC的轻量级ORM框架sborm.zip

    就是if else ...),但是对于查询业务简单但是数据库集群环境的场景有点憋屈(其实对mybatis使用也不多,瞎评论^_^)。 3、spring jdbc:小巧,灵活,足够优秀,个人比较喜欢使用,但是代码量偏大,原生的接口重复...

    操作系统课程设计 银行家算法

    银行家算法程序代码 #include #include #include using namespace std; typedef struct Max1 // 资源的最大需求量 { int m_a; int m_b; int m_c; }Max; typedef struct Allocation1 //已分配的资源数 { int a_a...

    原生js实现日期联动

    月份的判定,由于涉及到过多了判定条件,如果用if else会大大降低性能,建议用switch 语法 代码如下: 代码如下:  getDays:function(year,month){  // var aDay = [31,28|29,31,30,31,30,31,31,30,31,30,31];  /...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    所以只有用第一种方法,将该语句也放到if 语句中,而在else 语句中用else return 0; ,这样如果enterBtn 没有被按下,那么程序就会结 束执行了。 到这里,我们就实现了一个界面结束执行,然后弹出另一个 界面的程序...

    C++MFC教程

    对于初学者:应该选择一些内容比较全面的书籍,并且书籍中的内容应该以合理的方式安排,在使用该书时可以达到循序渐进的效果,书中的代码要有详细的讲解。尽量买翻译的书,因为这些书一般都比较易懂,而且语言比较...

Global site tag (gtag.js) - Google Analytics