关于消除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,还需要自行斟酌。

         希望本文能给读者带来启发。

 

 

 

posted @ 2013-12-25 18:14  杨元  阅读(5439)  评论(2编辑  收藏  举报