首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何优化代码中大量的ifelse

一、如何优化代码中大量的if/else 不是所有的if/else和switch/case都需要优化,当我们发现有“痛点”或者“闻到代码有坏味道”再来优化才是最好的,不然你可能会写了一个从不扩展的可扩展代码...,所有的优化都是为了更好的迭代项目,更好的服务于业务,而不是为了优化而优化——深夜里的程序员 1、判断条件取反,提前return package com.zibo.ifelse; // 判断条件取反...; import java.util.function.Function; // 使用 Optional public class Method03 { public static void...; } } 4、表驱动法 表驱动法:使用查询代替逻辑语句 package com.zibo.ifelse; // 表驱动法:数组小技巧 public class Method04 {...System.out.println("Two"); } public void doThree(){ System.out.println("Three"); } } 7、其他 遇到大量

2900
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    代码中大量的ifelse,你有什么优化方案?

    前期迭代懒得优化,来一个需求,加一个if,久而久之,就串成了一座金字塔。 当代码已经复杂到难以维护的程度之后,只能狠下心重构优化。那,有什么方案可以优雅的优化掉这些多余的if/else? 1....2,使用Optional优化之后,让非空校验更加优雅,间接的减少if操作 Optional userOptional = Optional.ofNullable(user); userOptional.map...if (month == 10) return 31; if (month == 11) return 30; if (month == 12) return 31; } 优化后的代码...,在编程时会大量的用到。...这种情况下最好的做法是写一篇详细的文档,从最原始的数学模型开始,然后表明什么情况下采取什么样的计算策略,策略如何推导,知道得到代码中使用的具体形式,然后给整个方法加上注释附上文档地址,并且在每个分支的地方加上注释指明对应到文档中哪个公式

    86310

    【前端词典】从 returnWeekday() 谈 if() 语句代码优化

    前言 最近部门在对以往的代码做一些优化,我在代码中看到一连串的 if(){}elseif(){} 的逻辑判断。这明显是有优化空间的。...由于内部代码不适合分享,这里我就用 来讲讲逻辑判断优化的一些方案。 这里先声明,免有人疑惑: 我们在项目中使用的很可能会有多层的嵌套,不像我的例子只有一层。...我们在看《JavaScript 高级程序设计》的时候,看到这样一句话: switch 语句与 if 语句的关系最为密切,而且也是在其他语言中普遍使用的一种流控制语句。...所以我们是不是可以考虑使用 switch 语句来优化一下呢? 入门 这里我们使用 switch 语句优化一遍代码。 注意: switch 语句在比较值的时候使用的是全等操作符,不会有类型转换的情况。...所以我们可以考虑使用数组来优化。

    51530

    使用 Prometheus 记录规则优化 PromQL 语句

    Grafana 已经无法按时渲染图表,并且偶尔还会出现超时的情况,特别是当我们在长时间汇总大量的指标数据的时候,Prometheus 查询超时的情况可能更多了,这时就需要一种能够类似于后台批处理的机制在后台完成这些复杂运算的计算...,对于使用者而言只需要查询这些运算结果即可。...Prometheus 提供一种记录规则(Recording Rule) 来支持这种后台计算的方式,可以实现对复杂查询的 PromQL 语句的性能优化,提高查询效率。...kube_node_status_allocatable_memory_bytes)[5m:5m]) Load time: 18656ms 记录规则 我们说了 Prometheus 提供了一种叫做 记录规则(Recording Rule)的方式可以来优化我们的查询语句...,记录规则的基本思想是,它允许我们基于其他时间序列创建自定义的 meta-time 序列,如果你使用 Prometheus Operator 的话可以发现 Prometheus 中已经有了大量此类规则,

    4.8K41

    SQL语句优化

    首先使用一个表调优: 语句如下: 基于选择的优化: 基于规则的优化: 可以看到 如果不加任何条件 使用的都是全表扫描。...下面我们使用不是主健的条件看看如何: 条件如下: SELECT * FROM sam_role a WHERE a.roledesc='aaaa'; 优化结果如下: 可以看到,如果查询条件不包含主健,那么仍然使用的是全表扫描...对于条件中出现 Or 的语句优化和and 的大不相同,我们看看: 上面我们使用的条件是 and , 如果 改为 or ,还是全表扫描。...我们看看两个都是关键字,但是条件是 or 的情况: 上面 基于选择的优化是:全表扫描, 而基于规则的优化是索引扫描。 很显然这种情况使用 基于规则的优化器 sql执行效果比chose规则优化器要好。

    1.7K20

    面试官:优化代码中大量的ifelse,你有什么方案?

    一个快速迭代的项目,时间久了之后,代码中可能会充斥着大量的if/else,嵌套6、7层,一个函数几百行,简!直!看!死!人! ? 这个无限循环嵌套,只是总循环的一部分。。。...你懒,我也懒,前期迭代懒得优化,来一个需求,加一个if,久而久之,就串成了一座金字塔。 ? 当代码已经复杂到难以维护的程度之后,只能狠下心重构优化。...学会使用 Optional Optional主要用于非空判断,由于是jdk8新特性,所以使用的不是特别多,但是用起来真的爽。...2,使用Optional优化之后,让非空校验更加优雅,间接的减少if操作 Optional userOptional = Optional.ofNullable(user); userOptional.map...,在编程时会大量的用到。

    70310

    Java中的大量if else语句的替代方案

    开发过程中可能会出现大量If else的场景,非常不优雅。...之前写过转载过一篇类似的不错的文章《除代码中的 if-else/switch-case的正确姿势》https://blog.csdn.net/w605283073/article/details/89117561...简介 大量的if嵌套让代码的复杂性增高而且难以维护。本文将介绍多种解决方案。 2. 案例 下面模拟业务逻辑,根据传入的条件作出不同的处理方式。...使用枚举 在枚举中定义操作,如下: public enum Operator { ADD, MULTIPLY, SUBTRACT, DIVIDE } 然而不同的操作对应的逻辑不一样,我们编写抽象方法...public int calculate(Command command) { return command.execute(); } 测试代码 @Test public void whenCalculateUsingCommand_thenReturnCorrectResult

    1.8K20

    Hadoop 大量小文件问题的优化

    如果存储小文件,必定会有大量这样的小文件,否则你也不会使用 Hadoop,这样的文件给 Hadoop 的扩展性和性能带来严重问题。...因而,在 HDFS 中存储大量小文件是很低效的。访问大量小文件经常会导致大量的 seek,以及不断的在 DatanNde 间跳跃去检索小文件。这不是一个很有效的访问模式,严重影响性能。...为什么会产生大量的小文件 至少在两种场景下会产生大量的小文件: 这些小文件都是一个大逻辑文件的一部分。...对于客户端来说,使用 HAR 文件系统没有任何的变化:所有原始文件都可见以及可以访问(只是使用 har://URL,而不是 hdfs://URL),但是在 HDFS 中中文件个数却减少了。...4.2.2 SequenceFile 通常解决”小文件问题”的回应是:使用 SequenceFile。这种方法的思路是,使用文件名作为 key,文件内容作为 value,如下图。 ?

    4.6K41

    MongoDB大量集合启动加载优化原理

    MongoDB 在最新开发版本里针对这个问题进行了优化,尤其是对于大量集合场景,效果非常明显。...metadata cursor使用优化原理 metadata cursor简介 WiredTiger的metadata cursor是WiredTiger用于读取WiredTiger.wt表(元数据表...从启动加载过程可以看到,主要有三处使用metadata cursor的地方,而MongoDB启动加载优化中一个主要的优化点,就是把前面两处使用『metadata:create』 cursor的地方改成了...延迟打开cursor优化 MongoDB最新版本中,还有一个针对大量集合/索引场景的特定优化,那就是『延迟打开Cursor』。...可以看到,这个优化本身并没有对底层WiredTiger引擎实现有任何改动,对于上层MongoDB的改动也不大,而是通过深挖底层存储引擎WiredTiger cursor使用上的细节,找到了关键因素,最终取得了非常显著的效果

    1.5K10

    SQL语句的优化

    SQL语句的优化 如何索取有性能问题SQL的渠道 通过用户反馈获取存在性能问题的SQL 通过慢查日志获取存在性能问题的SQL 实时获取存在性能问题的SQL 慢查询日志介绍 slow_quey_log=on...表示只有在查询语句中使用了SQL_CACHE和SQL_NO_CACHE来控制是否需要进行缓存 query_cache_size 设置查询缓存的内存的大小 query_cache_limit 设置查询缓存可用的存储的最大值...优化SQL的查询计划 语法解析阶段是通过关键字对MySQL语句进行解析,并生成一颗对应的解析树 MySQL解析器将使用MySQL语法规则验证和解析查询,包括检查语法是否使用了正确的关键走;关键字的顺序是否正确等等...将一个表达式转化为一个常数表达式 6.子查询优化 7.提前终止查询 8.对in()条件进行优化 如何确定查询处理各个阶段所消耗的时间 使用profile[不建议使用,未来mysql中将被移除] set...NOT IN ( SELECT customer_id FROM payment ) #优化后的SQL语句 SELECT a.customer_id, a, first_name, a.last_name

    3.3K00

    Mysql查询语句优化

    分析查询 想要对一条查询语句进行优化,首先要对其进行分析,MySQL提供了这个机制, 可以通过explain sql 或者desc sql的语法去获取MySQL对某一条语句的执行计划(MySQL优化之后的...查询优化 对一条sql的优化可以分为两部分,第一部分是对语句的优化,比如将子查询改写为join等,第二部分是与索引相关的优化,在这一阶段可能会修改语句以让查询尽可能的命中索引,甚至会通过修改索引来达到这个目的...查询语句优化 检查语句 查询语句优化的第一步,首先从大的层面上分析一下语句,得到以下问题的答案: 是否请求了不需要的数据?...具体的优化策略 优化count() count()函数需要扫面大量的数据,在MyISAM中速度是比较快的,但是在其他存储引擎却不是,对count()语句可以有以下的优化策略....优化关联查询 确保on/where语句中的列上有索引. 确保order by / group by 只根据一个表上的字段进行,这样才有使用索引进行排序分组的可能性.

    5.2K20

    避免在 JS 中过多使用 IF 语句优化技巧

    作者:Damian Ciplat 译者:前端小智 来源:dev 最近在重构代码时,我发现早期的代码使用太多的 if 语句,其程度是我从未见过的。...这就是为什么我认为分享这些简单的技巧是非常重要的,这些技巧可以帮助我们避免过多的使用 if 语句。...接下来会介绍6种方式来代替 if 的使用,这样做不是坚决不使用 if 偏执狂,而是换个方式思考我们的编码思路。 1....4.非分支策略 此技巧尝试避免使用switch语句,相反是用键/值创建一个映射并使用一个函数访问作为参数传递的键的值。...", })[breed]||'Im the default'; dogSwitch("border xxx") 5.作为数据的函数 我们知道在JS中函数是第一个类,所以使用它我们可以把代码分割成一个函数对象

    2.3K20

    join 语句怎么优化?

    直到驱动表的数据全都匹配完毕 批量取数据能减少很多IO操作,因此执行效率比较高,这种连接操作也被MySQL采用 对了,这块内存在MySQ中有一个专有的名词,叫做 join buffer,我们可以执行如下语句查看...Engine=InnoDB CHARSET=utf8; create table t1 like single_table; create table t2 like single_table; 如果直接使用...join 语句,MySQL优化器可能会选择表 t1 或者 t2 作为驱动表,这样会影响我们分析sql语句的过程,所以我们用 straight_join 让mysql使用固定的连接方式执行查询 select...当然这个结论的前提是可以使用被驱动表的索引」 「总而言之,我们让小表做驱动表即可」 「当 join 语句执行的比较慢时,我们可以通过如下方法来进行优化」 进行连接操作时,能使用被驱动表的索引 小表做驱动表

    1.3K20
    领券