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-else的简单总结的更多相关文章

  1. cocos2d 消除类游戏简单的算法 (一)

    1. 游戏视频演示 2.三消游戏我的理解 上面视频中的游戏.我做了2个星期时间,仅仅能算个简单Demo,还有bug.特效也差点儿没有.感觉三消游戏主要靠磨.越磨越精品. 市场上三消游戏已经超级多了.主 ...

  2. CSipSimple 简单分析

    简介 CSipSimple是一款可以在android手机上使用的支持sip的网络电话软件,可以在上面设置使用callda网络电话.连接使用方式最好是使用wifi,或者3g这样上网速度快,打起电话来效果 ...

  3. 设计完美的策略模式,消除If-else

    策略模式是oop中最著名的设计模式之一,是对方法行为的抽象,可以归类为行为设计模式,也是oop中interface经典的应用.其特点简单又实用,是我最喜欢的模式之一.策略模式定义了一个拥有共同行为的算 ...

  4. MVC+Spring.NET+NHibernate .NET SSH框架整合 C# 委托异步 和 async /await 两种实现的异步 如何消除点击按钮时周围出现的白线? Linq中 AsQueryable(), AsEnumerable()和ToList()的区别和用法

    MVC+Spring.NET+NHibernate .NET SSH框架整合   在JAVA中,SSH框架可谓是无人不晓,就和.NET中的MVC框架一样普及.作为一个初学者,可以感受到.NET出了MV ...

  5. Java虚拟机11:运行期优化

    前言 http://www.cnblogs.com/xrq730/p/4839245.html,HotSpot采用的是解释器+编译器并存的架构,之前的这篇文章里面已经讲过了,本文只是把即时编译器这块再 ...

  6. 失落的C语言结构体封装艺术

    Eric S. Raymond <esr@thyrsus.com> 目录 1. 谁该阅读这篇文章 2. 我为什么写这篇文章 3.对齐要求 4.填充 5.结构体对齐及填充 6.结构体重排序 ...

  7. delphi的多线程编程

    多线程的基本概念 win 98/nt/2000/xp 是个多任务操作系统,也就是:一个进程可以划分为多个线程,每个线程轮流占用cpu 运行时间和资源,或者说,把cpu 时间划成片,每个片分给不同的线程 ...

  8. 简简单单安装debian桌面工作环境

    linux一般给人的影响是对使用者的要求偏高, 使用者需要自行配置很多相应的系统工作参数,因此,从一定的程度上阻碍了用户去使用它.而本文所介绍的是, 使用者完全可以消除这个障碍,非常简单地安装好自己的 ...

  9. (转)失落的C语言结构体封装艺术

    目录1. 谁该阅读这篇文章 2. 我为什么写这篇文章 3.对齐要求 4.填充 5.结构体对齐及填充 6.结构体重排序 7.难以处理的标量的情况 8.可读性和缓存局部性 9.其他封装的技术 10.工具 ...

  10. 笔记整理--C语言

    linux下错误的捕获:errno和strerror的使用 - Google Chrome (2014/2/26 17:31:39) linux下错误的捕获:errno和strerror的使用 201 ...

随机推荐

  1. 将Word发布到CSDN

    将Word发布到CSDN 注:以Word2010为例 注册CSDN账号 打开Word新建一篇博客 打开"管理账户"新建一个账户,博客类别选择"其他" API选择 ...

  2. ASP.NET MVC应用程序执行过程分析

    ASP.NET MVC应用程序执行过程分析 2009-08-14 17:57 朱先忠 朱先忠的博客 字号:T | T   ASP.NET MVC框架提供了支持Visual Studio的工程模板.本文 ...

  3. web.py+mysql插入中文提示query = query.encode(charset) UnicodeEncodeError: 'latin-1' codec can't encode characters in position 86-100

    对于中文编码的问题,总会出现各种各样恶心的错误,还不知道应该怎么解决,首先,你从最开头就应该关注编码问题,尽量保证所有的编码方式都是一致的 用python+web.py+mysql来写程序,首先要保证 ...

  4. Struts2复习笔记

    一.Struts2的获得 Struts2的官网是http://struts.apache.org/,需要的同学可以自己去官网上下载. 二.Struts2的配置 以动态web项目为例,讲解配置Strut ...

  5. Selenium2+python自动化9-CSS定位语法

    前言 大部分人在使用selenium定位元素时,用的是xpath定位,因为xpath基本能解决定位的需求.css定位往往被忽略掉了,其实css定位也有它的价值,css定位更快,语法更简洁.这一篇css ...

  6. 什么是侧翼区(flanking region)和侧翼区单核苷酸多态性(Flanking SNPs)

    侧翼区(flanking region) 根据维基定义:The 5' flanking region is a region of DNA that is adjacent to the 5' end ...

  7. HttpModule的一些初步认识

    新建一个类 ValidaterHttpModuleEvents继承管道接口 IHttpModule,代码如下 public class ValidaterHttpModuleEvents:IHttpM ...

  8. DNA Pairing

    function pair(str) { //return str; var arr = str.split(''); var pait = ''; var result = arr.map(func ...

  9. (转)对Oracle导出文件错误和DMP文件结构的分析,EXP-00008: 遇到 ORACLE 错误 904 ORA-00904: "MAXSIZE": invalid identifier

    EXP-00008: 遇到 ORACLE 错误 904 ORA-00904: "MAXSIZE": invalid identifier 原因:oracle版本不一样 执行 C:/ ...

  10. Odoo10尝鲜:制造

    Odoo10主要是对 MRP 进行重构, 增加制造领料类型 简化工作中心 指定投料的作业 工作中心的生产效率指标,例如 OEE 基于历史工单数据,统计.计算工序作业时长     并增加了新功能,例如 ...