关于消除if-else的简单总结
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,还需要自行斟酌。
希望本文能给读者带来启发。