代码优化——去除你代码中的if...else...层层嵌套

简介: 首先来看问题代码:public static String query(){ if(1==1){ if(2==2){ if(3==3){ if(4==4){ int b=0; for(int i=0;i



首先来看问题代码:


public static String query(){
		if(1==1){
			if(2==2){
				if(3==3){
					if(4==4){
						int b=0;
						for(int i=0;i<10000;i++){
							if(i<10){
								continue;
							}else{
								b+=i;
								return String.valueOf(b);
							}
						}
					}else{
						return "";
					}
				}else{
					return "";
				}
			}else{
				return "";
			}
		}else{
			return "";
		}
		return "";
	}


     其实我们会时常遇到这种逻辑上的嵌套判断,里面包含着各种循环,循环里面包含着小判断,刚开始的时候,代码还没有这么庞大,但是随着版本的迭代,后来的人很可能发现了这段代码有些逻辑上的小漏洞,于是就在这个基础上拼命加IF。。。else..最后搞得大家谁也不敢动这段代码,好像它一碰就会塌陷的样子。


     想到这个问题,是因为之前做过一个游戏的东西,本来就是个简单的抽奖逻辑,但是之后上线之前,PM大人让加上各种东西:比如,身份认证,线程安全,等待页面,活动未开始和活动已经结束处理等等。。。结果那个方法就神似了上面那个样子。


     今天写一段代码的时候,发现自己又陷入了各种if。。else嵌套,但是还好这次避开了这个坑:


public static String query(Student stu) throws NoSuchMethodException,
			SecurityException, IllegalAccessException,
			IllegalArgumentException, InvocationTargetException {
		StringBuilder sb = new StringBuilder("select * from ");
		Class stuClass = stu.getClass();// 获取class

		/* 如果没有加入table注解,返回null */
		if (!stuClass.isAnnotationPresent(Table.class)) {
			return null;
		}
		Table table = (Table) stuClass.getAnnotation(Table.class);// 获取到table注解
		sb.append(table.value() + " where 1=1 ");// 拼入表名称
		/* 通过get方法获取field字段值 */
		Field[] fields = stuClass.getDeclaredFields();// 获取类字段信息
		for (Field fd : fields) {
			if (!fd.isAnnotationPresent(Column.class)) {// 如果field未标记注解,不作为查询条件
				continue;
			}
			String getMethodName = "get"
					+ fd.getName().substring(0, 1).toUpperCase()
					+ fd.getName().substring(1);
			Method getMethod = stuClass.getMethod(getMethodName); // 获取到field的get方法
			/* 如果函数动态调用返回值为空或者字段为integer未赋值,则不拼接 */
			if (getMethod.invoke(stu) == null
					|| (getMethod.invoke(stu) instanceof Integer && (Integer) getMethod
							.invoke(stu) == 0)) {
				continue;
			}
			if (getMethod.getReturnType() == String.class) {
				sb.append("and " + fd.getName() + "='" + getMethod.invoke(stu)
						+ "'");
			} else if (getMethod.getReturnType() == int.class) {
				sb.append("and " + fd.getName() + "=" + getMethod.invoke(stu));
			}// 其他类型自己判断去吧。。。但是感觉这么写不好。。。。有待改进的方法

		}

		return sb.toString();
	};


           看出来了么,在if语句中,通过提前返回来减少if的嵌套,在for循环中,通过continue来提前结束本次循环。基本思路都是让代码以最自然,最流畅,自正常的思路进行下去,避免自己在看代码的时候也陷入自己挖的思维巨坑。









目录
相关文章
|
8月前
|
设计模式 算法 前端开发
有什么可以减少注释,但依然能让他人看得懂代码的方法吗?
有什么可以减少注释,但依然能让他人看得懂代码的方法吗?
62 0
|
2月前
|
自然语言处理 算法 Python
再谈递归下降解析器:构建一个简单的算术表达式解析器
本文介绍了递归下降解析器的原理与实现,重点讲解了如何使用Python构建一个简单的算术表达式解析器。通过定义文法、实现词法分析器和解析器类,最终实现了对基本算术表达式的解析与计算功能。
102 52
|
3月前
|
设计模式 安全 Java
条件语句的多层嵌套问题优化,助你写出不让同事吐槽的代码!
条件语句的多层嵌套问题优化,助你写出不让同事吐槽的代码!
|
8月前
|
敏捷开发 人工智能 开发者
Code Smell 重构你的日常代码-圈复杂度高多层嵌套
圈复杂度是一种代码复杂度指标,用于衡量代码中条件分支的数量,数值越高表示代码越复杂,测试和维护难度越大。在不断迭代的代码中,过多的条件判断可能导致难以理解和维护的"气功波"代码。为了解决这个问题,可以采用重构策略,比如使用卫语句减少嵌套、遵循单一职责原则使函数功能更专注、通过抽象解析器模型实现关注点分离以及确保代码在同一抽象层次等。通过这些方法,可以提高代码的可读性和可维护性,降低复杂性,从而改善代码质量。
|
设计模式 算法 Java
设计模式第八讲:常见重构技巧 - 去除多余的if else
设计模式第八讲:常见重构技巧 - 去除多余的if else
121 0
|
安全 搜索推荐
如何避免写重复代码?两种常见的方法:抽象和组合
如何避免写重复代码?两种常见的方法:抽象和组合
268 0
|
程序员
相见恨晚的Matlab编程小技巧(2)-代码怎么做到逻辑清晰?——巧用注释符“%“
        本文将以教程的形式详细介绍Matlab中两个常用符号“%”和“%%”的作用。初学者可以通过此文掌握这两个符号的用法,为Matlab编程打下坚实的基础。
|
Python
巧用for循环嵌套结构
巧用for循环嵌套结构
106 0
|
SQL 缓存 安全
如何避免写重复代码:善用抽象和组合
通过抽象和组合,我们可以编写出更加简洁、易于理解和稳定的代码;类似于金字塔的建筑过程,我们总是可以在一层抽象之上再叠加一层,从而达到自己的目标。但是在日常的开发工作中,我们如何进行实践呢?本文将以笔者在Akka项目中的一段社区贡献作为引子分享笔者的一点心得。
165 0
如何避免写重复代码:善用抽象和组合