表驱动

if-else代码优化的八种方案

孤街醉人 提交于 2020-04-06 11:01:25
if-else代码优化的八种方案 if-else代码优化的八种方案 前言 代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码的八种方案。 优化方案一:提前return,去除不必要的else 如果if-else代码块包含return语句,可以考虑通过提前return,把多余else干掉,使代码更加优雅。 优化前: if(condition){ //doSomething }else{ return ; } 优化后: if(!condition){ return ; } //doSomething 优化方案二:使用条件三目运算符 使用条件三目运算符可以简化某些if-else,使代码更加简洁,更具有可读性。 优化前: int price ; if(condition){ price = 80; }else{ price = 100; } 优化后: int price = condition?80:100; 优化方案三:使用枚举 在某些时候,使用枚举也可以优化if-else逻辑分支,按个人理解,它也可以看做一种 表驱动方法 。 优化前: String OrderStatusDes; if(orderStatus==0){ OrderStatusDes ="订单未支付"; }else if(OrderStatus=

为云·寻找黑马程序员#【代码重构之路】如何“消除”if/else【华为云技术分享】

感情迁移 提交于 2019-12-10 15:31:39
1. 背景 if/else是高级编程语言中最基础的功能,虽然 if/else 是必须的,但滥用 if/else,特别是各种大量的if/else嵌套,会对代码的可读性、可维护性造成很大伤害,对于阅读代码的人来说就是一场灾难。 本系列博客的目的不是消除if/else,而是如何“写好”if/else 2. 方法 根据if/else的使用方式和场景,大概有如下解决方法 多态 表驱动 职责链模式 卫语句 Optional 调整判断逻辑,抽取方法,逻辑优化 本篇博客我介绍的是表驱动,后续博客会介绍其他案例 首先来看下最简单的if…else if…场景,也是经常可以在代码中看到的案例 3. 案例 有如下业务代码demo,根据type值,判断然后返回设备的名称 1 //逻辑表达模式固定的 if…else 2 public String getDeviceName(int type){ 3 if (type == 1) { 4 return "ONT"; 5 } else if (type == 2) { 6 return "OLT"; 7 } else if (type == 3) { 8 return "ONU"; 9 } else if (type == 4) { 10 return "MXU"; 11 } 12 return null; 13 } 随着时间的积累和项目的迭代

表驱动

匿名 (未验证) 提交于 2019-12-03 00:15:02
表驱动法: 一种编程模式,从表里面查找信息而不使用逻辑语句(if、case)。 简单一点的表驱动: 假设有一个程序,需要处理其他程序发送的消息,消息类型是字符串,每个消息都需要一个函数进行处理。最基本的处理: 按照表驱动的设计思路,可以这样设计: 复杂一点的表驱动: 考虑一个消息(事件)驱动的系统,系统的某一模块需要和其他的几个模块进行通信。它收到消息后,需要根据消息的发送方,消息的类型,自身的状态,进行不同的处理。 比较常见的一个做法是用三个级联的switch分支实现通过硬编码来实现: 用表驱动的方法来实现: 根据定义的三个枚举:模块类型、消息类型、自身模块状态,定义一个函数跳转表 来源:博客园 作者: tongyishu 链接:https://www.cnblogs.com/tongyishu/p/11682115.html

表驱动

五迷三道 提交于 2019-12-01 10:43:33
表驱动法: 一种编程模式,从表里面查找信息而不使用逻辑语句(if、case)。 简单一点的表驱动: 假设有一个程序,需要处理其他程序发送的消息,消息类型是字符串,每个消息都需要一个函数进行处理。最基本的处理: 按照表驱动的设计思路,可以这样设计: 复杂一点的表驱动: 考虑一个消息(事件)驱动的系统,系统的某一模块需要和其他的几个模块进行通信。它收到消息后,需要根据消息的发送方,消息的类型,自身的状态,进行不同的处理。 比较常见的一个做法是用三个级联的switch分支实现通过硬编码来实现: 用表驱动的方法来实现: 根据定义的三个枚举:模块类型、消息类型、自身模块状态,定义一个函数跳转表 来源: https://www.cnblogs.com/tongyishu/p/11682115.html

第十八章 表驱动法

梦想与她 提交于 2019-11-30 01:44:17
表驱动法是一种编程模式——从表里面查找信息而不使用逻辑语句( if 和 case )。 表驱动法使用总则 在适当的环境下,采用表驱动法,所生成的代码会比复杂的逻辑代码更简单、更容易修改,而且效率更高。 使用表驱动法的两个问题 使用表驱动法必须先解决两个问题。首先,你必须要回答怎样从表中查询条目的问题。其次是考虑在表中存些什么。 直接访问表 和所有的查询表一样,直接访问表代替了更为复杂的逻辑控制结构。之所以说它们是“直接访问”的,是因为你 无须绕很多复杂的圈子就能够在表里面找到你想要的信息。 索引访问表 有时候,只用一个简单的数学运算还无法将数据转换成表键值。这类情况中的一部分可以通过使用索引访问的方法加以解决。 当你使用索引的时候,先用一个基本类型的数据从一张索引表中查出一个键值,然后再用这一键值查出你感兴趣的主数据。 索引访问技术有两个主要优点: 首先,如果主查询表中的每一条记录都很大,那么创建一个浪费了很多空间的索引数组所用的空间,就要比创建一个浪费了很多空间的主查询表所用的空间小得多; 其次,即使你用了索引以后没有节省内存空间,操作位于索引中的记录有时也要比操作位于主表中的记录更方便更廉价; 索引访问技术的最后一个优点是表查询技术在可维护性上所具有的普遍优点。 访问阶梯表 使用阶梯技术时需要注意的细节: 留心端点; 考虑使用二分查找代替顺序查找; 考虑用素银访问来取代阶梯技术

mysql驱动表与被驱动表及join优化

做~自己de王妃 提交于 2019-11-28 04:59:43
驱动表与被驱动表 先了解在join连接时哪个表是驱动表,哪个表是被驱动表: 1.当使用 left join 时,左表是驱动表,右表是被驱动表 2.当使用 right join 时,右表时驱动表,左表是驱动表 3.当使用 join时 ,mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表 join查询如何选择驱动表与被驱动表   在sql优化中,永远是以小表驱动大表 。 例如: A是小表,B是大表   使用left join 时,则应该这样写select * from A a left join B b on a.code=b.code   A表时驱动表,B表是被驱动表 测试 :A表140多条数据,B表20万左右的数据量   select * from A a left join B b on a.code=b.code   执行时间:7.5s   select * from B b left join A a on a.code=b.code   执行时间:19s 结论:小表驱动大表优于大表驱动小表 join查询在有索引条件下    驱动表有索引不会使用到索引   被驱动表建立索引会使用到索引 在以小表驱动大表的情况下,再给大表建立索引会大大提高执行速度 测试:给A表,B表建立索引 分析:EXPLAIN select * from A a left join B b on