关于消除if-else的简单总结
2013-12-25 18:14
127 查看
if-else是计算机语言中基本的分支语句,虽然很简单,但可能会出现滥用的情况,如图:
这种标记判断,嵌套成这样(其实没有必要嵌套),会让别人觉得作者水平很低。
可以看出,这些if仅仅是在判断一个变量,根据这个变量的值,返回不同的文字信息。
用switch也不是很好,那样虽然理解起来容易一些,但仍然需要编写很长很长的代码。
接下来小菜就总结几点消除if-else的小技巧。
1.将对应关系保存在数据库中,作为字典。
截图中的例子,无非就是一个对应关系,把指定的数字翻译成文字信息。
这很像我们常用的字典,我们只需要把数字和文字信息存入数据库,然后通过数字查询文字信息即可。
这样一来,翻译工作仅需一条简单的sql语句就能完成,完全不需要这样写这么多冗余代码。
缺点是这样可能会造成数据库频繁访问。
2.巧用map。
大家都知道,map是一个键值对结构,拿上边的例子来说,我们可以把数字作为key,文字信息作为value存入map,这样一来,我们无需任何判断,直接map.get(key)就可以拿到文字信息。
通过map这个数据结构,我们可以轻易的完成对应关系,无需关心底层实现。
需要注意的是,最好不要把对应关系在程序中写死,可以和数据库配合一下,创建一个专门转换的类,这个类在加载的时候去数据库里查一下对应关系,然后保存到map中,以后再取,直接读map就可以了,这样即保证了效率(只查询一次数据库),又保证了灵活性(修改对应关系无需改动程序,修改数据库即可)。
3.map延伸。
其实,map很神奇,再多考虑一步,map的value中保存的不再是基本数据类型,而是对象。
这样一来,通过不同的key可以拿到不同的对象,如果这些对象的类都实现同一个接口,那么这就是一个加强版的策略模式。
策略模式就是多态,传统的策略模式传入的是实现类的对象,而通过map加强,只需传入一个数字或字符串即可实现多态。
当然,小菜只是简单的总结了一下思路,应对普通的if还可以,但是对于复杂的、混有大量业务逻辑的if,还需要自行斟酌。
希望本文能给读者带来启发。
这种标记判断,嵌套成这样(其实没有必要嵌套),会让别人觉得作者水平很低。
可以看出,这些if仅仅是在判断一个变量,根据这个变量的值,返回不同的文字信息。
用switch也不是很好,那样虽然理解起来容易一些,但仍然需要编写很长很长的代码。
接下来小菜就总结几点消除if-else的小技巧。
1.将对应关系保存在数据库中,作为字典。
截图中的例子,无非就是一个对应关系,把指定的数字翻译成文字信息。
这很像我们常用的字典,我们只需要把数字和文字信息存入数据库,然后通过数字查询文字信息即可。
这样一来,翻译工作仅需一条简单的sql语句就能完成,完全不需要这样写这么多冗余代码。
缺点是这样可能会造成数据库频繁访问。
2.巧用map。
大家都知道,map是一个键值对结构,拿上边的例子来说,我们可以把数字作为key,文字信息作为value存入map,这样一来,我们无需任何判断,直接map.get(key)就可以拿到文字信息。
通过map这个数据结构,我们可以轻易的完成对应关系,无需关心底层实现。
需要注意的是,最好不要把对应关系在程序中写死,可以和数据库配合一下,创建一个专门转换的类,这个类在加载的时候去数据库里查一下对应关系,然后保存到map中,以后再取,直接读map就可以了,这样即保证了效率(只查询一次数据库),又保证了灵活性(修改对应关系无需改动程序,修改数据库即可)。
3.map延伸。
其实,map很神奇,再多考虑一步,map的value中保存的不再是基本数据类型,而是对象。
这样一来,通过不同的key可以拿到不同的对象,如果这些对象的类都实现同一个接口,那么这就是一个加强版的策略模式。
策略模式就是多态,传统的策略模式传入的是实现类的对象,而通过map加强,只需传入一个数字或字符串即可实现多态。
当然,小菜只是简单的总结了一下思路,应对普通的if还可以,但是对于复杂的、混有大量业务逻辑的if,还需要自行斟酌。
希望本文能给读者带来启发。
相关文章推荐
- 关于if..else..及for循环的简单小练习(一)
- 关于Java中if else,Math.round()方法的总结
- 关于XP与WIN7文件夹共享和打印机共享的简单总结
- 关于mybatis根据传进来的参数执行不同的语句,类似于java中的if~else~语句
- 关于if语句的使用简单举例,如果输入的数字不在有效范围内可继续输入 .cpp
- 关于mysql 简单的查询语句 以及常用函数的 总结
- 代码重构----使用java有限状态机来消除太多的if else判断
- c标签 if else c标签 总结
- JAVA学习(三)__c标签 if else c标签 总结
- 关于ASP.NET MVC4 Web API简单总结
- 关于JSON与JSONP简单总结
- JAVASE总结--03(方法、if-else、switch-case)
- jsp if else c标签 总结
- 最近遇到不少客户提出关于PP账户名字需要更改,如何更改的问题。因此在此做个简单的总结,希望能帮到一些朋友!
- 10027---关于<:if>没有<c:else>解决方案
- 编程思维积累一:关于if else
- 【转】Java策略消除if else
- c标签 if else c标签 总结
- 关于mysql 简单的查询语句 以及常用函数的 总结
- python-简单的密码登录if else判断