美文网首页
if-else优化问题

if-else优化问题

作者: any_5637 | 来源:发表于2019-11-05 10:52 被阅读0次

在项目开发中,我们总是不可避免做大量的判断,很多时候,我们的第一反应就是使用if-else进行判断。但是,过多的if-else会导致代码不美观、且复杂的if-else让人难以理解,因此在代码的写法上做一些优化可以大大提高代码的质量。这里,通过我的学习和了解,总结了一些优化if-else的方法:

  • 对于简单的if-else判断
    1. 使用三元表达式替换
      type === 'detail' ? 'SEE' : 'EDIT',
    
    1. 使用=== !== || && 等运算符替换
      // 这里列举一个例子
      this.setState({
        disabledCooper: this.detailDS.current.data.operationDepartment !== 'MERCHANTS',
      });
    
      this.setState({
        disabledCooper: this.detailDS.current.data.operationDepartment !== 'MERCHANTS' && this.state.isShow,
      });
    
  • 复杂的逻辑判断
    1. 优化if判断:把最可能出现的条件放在前面,把最不可能出现的条件放在后面,这样程序执行时总会按照写的逻辑的先后顺序逐一检测所有的条件,知道发现匹配的条件才会停止继续检测。
    2. 使用switch case:switch和if else在性能上是没有什么区别的,主要还是根据需求进行分析和选择。条件较小的话选用if else比较合适。条件数量较大的话,就建议选用switch。在大多数的情况下switch比if else运行的更加快。
      data.map(item => {
        if (item) {
          switch (item.fieldCode) {
            case 'CATEGORY_GOOD':
              return <Lov name="productCategoryCodeObject" />;
            case 'SETTLEMENT_METHOD':
              return <Select name="settleMethodCode" onChange={this.onChange} />;
            case 'PAYMENT':
              return <Lov name="paymentMethodObject" />;
            case 'SALES_FROM':
              return <NumberField name="salesAmountFrom" />;
            case 'SALES_TO':
              return <NumberField name="salesAmountTo" />;
            case 'DEDUCATION_RATE':
              return <TextField name="deductRate" addonAfter="%" />;
            case 'GUARANTEED':
              return <TextField name="guaranteeSaleAmt" />;
            case 'ADJUST_CYCLE_UNIT':
              return <Select name="adjustPeriodUomCode" />;
            case 'ADJUST_CYCLE_VALUE':
              return <TextField name="adjustPeriodValueCode" />;
            // case 'S_DEDUCATION_RATE':
            //   return <CheckBox name="specialDeductionFlag" />;
            case 'NO_CONSUMPTION_TAX':
              return <CheckBox name="taxFreeDeductFlag" />;
            case 'NO_VAT':
              return <CheckBox name="vatFreeDeductFlag" />;
            case 'ENABLE':
              return <CheckBox name="enabledFlag" />;
            default:
              return null;
          }
        }
        return null;
      })
    
    1. 使用数组映射的方式:在数据查找速度方面,如果能够直接映射到的查找方式绝对比if else判断包括switch的性能好的太多。
      const statusMap = [{status: 'error', message: '生成成功'}, {status:'success', message: '生成失败'}, {status: 'default', message: '生成中'}];
    
      /**
      * 返回 是/否 多语言 并加上对应的状态
      * @param {1|any} v 值
      * @return 1 -> yes(多语言), other -> no(多语言)
      */
      yesOrNoRender(v) {
        return <Badge status={statusMap[v].status} text={intl.get('dd').d(`statusMap[v].message`)} />;
      }
    
    1. 使用JSON优化:
      const actions = {
        'error':()=>{return '生成成功'},
        'success':()=>{return '生成失败'},
        'default':()=>{return '生成中'},
      }
    
      /**
      * 返回 是/否 多语言 并加上对应的状态
      * @param {1|any} v 值
      * @return 1 -> yes(多语言), other -> no(多语言)
      */
      yesOrNoRender(v) {
        return <Badge status={v} text={intl.get('dd').d(`actions[v]`)} />;
      }
    

相关文章

  • if-else优化问题

    在项目开发中,我们总是不可避免做大量的判断,很多时候,我们的第一反应就是使用if-else进行判断。但是,过多的i...

  • 优化if-else

    简介: 从一开始学编程的时候,就开始接触到if-else,也是最简单的一个条件分支,包括到现在,依然很重要,在代码...

  • Java if-else 优化

    核心主旨: 1.根据代码的复杂程度,重构和模式也会带赖开销 2.解耦 3.过滤器、责任链等等也是为了解耦if--e...

  • 使用likely和unlikely 优化程序性能

    作用 likely unlikely是为编译器提供对分支优化的提示,基本用于if-else的分支优化场景。if-e...

  • 减少该死的 if else 嵌套

    优化if嵌套[https://www.jianshu.com/p/57c065b124c4] if-else重构高...

  • PHP IF-ELSE代码优化

    IF - ELSE structure's optimize PROCESS: 以 else 的情况作为错误开头,...

  • 优化过多的if-else

    开发中使用到if-else是再正常不过的了,如果需要判断的条件比较少,使用少量的if-else是最简单不过的,但是...

  • 鹅厂实习| 周记(四)

    以下是本周的知识清单: TypedArray if-else优化 注解替代枚举 一点小感悟 1.TypedArra...

  • iOS表驱动法去除if-else简化逻辑

    今天介绍用表驱动法优化代码中的逻辑 去除复杂繁多的if-else判断 WMZStrategy(demo) 所谓表...

  • [解锁新姿势] 回想起被 `if-else` 支配的恐惧,我们要

    前言 [解锁新姿势] 兄dei,你代码需要优化了 在之前文章说到,简单 if-else,可以使用 卫语句 进行...

网友评论

      本文标题:if-else优化问题

      本文链接:https://www.haomeiwen.com/subject/erdsbctx.html