代码简洁之道 判断篇

javascript 简洁之道 判断篇

第一个例子

if (state === 1) {
    return true
} else if (state === 2) {
    return true
} else if (state === 3) {
    return true
} else if (state === 4){
    return true
} else {
    return false
}

你首先想到的可能是 使用 switch case

switch (state) {
    case 1: return true
        break;
    case 2: return true
        break;
    case 3: return true
        break
    case 4: return true
        break
    default: return false
        break
}

看起来有条理了, 观察发现:

  • 都是判断 state
  • 都是 return true

我们用 Array.includes 来优化它:

const states = [1, 2, 3, 4]
if (states.includes(state) {
    return true
}
  • 代码更精简
  • 更易于维护

如果不是做相同的事情呢?

if (state === 1) {
    // do something
} else if (state === 2) {
    // do something
} else if (state === 3) {
    // do something
} else if (state === 4){
    // do something
} else {
    // do something
}

我们可以这样来优化它:

const actions = {
    1: () => { /*do something*/ },
    2: () => { /*do something*/ },
    3: () => { /*do something*/ },
    4: () => { /*do something*/ },
    'default': () => { /*do something*/ }
}

actions[state]() || actions['default']();
  • 可读性更高
  • 更易于维护

第二个例子

if (type === 'firstType') {
    if (state === 1) {/*do something*/
        // do something
    } else if (state === 2) {
        // do something
    } else if (state === 3) {
        // do something
    } else if (state === 4){
        // do something
    } else {
        // do something
    }
} else if (type === 'secondType') {
    if (state === 1) {
        // do something
    } else if (state === 2) {
        // do something
    } else if (state === 3) {
        // do something
    } else if (state === 4){
        // do something
    } else {
        // do something
    }
}

仿照上面的例子稍加变动我们就能将它优化:

const actions = {
  'firstType_1': ()=>{ /*do something*/ }],
  'firstType_2': ()=>{ /*do something*/ }],
  'firstType_3': ()=>{ /*do something*/ }],
  'firstType_4': ()=>{ /*do something*/ }],
  'secondType_1': ()=>{ /*do something*/ }],
  'secondType_2': ()=>{ /*do something*/ }],
  'secondType_3': ()=>{ /*do something*/ }],
  'secondType_4': ()=>{ /*do something*/ }],
  'default': ()=>{ /*do something*/ }]
}

const action = actions[`${type}_${state}`] || actions['default']

我们还可以使用 Map 来优化它:

const actions = new Map([
  ['firstType_1', ()=>{ /*do something*/ }],
  ['firstType_2', ()=>{ /*do something*/ }],
  ['firstType_3', ()=>{ /*do something*/ }],
  ['firstType_4', ()=>{ /*do something*/ }],
  ['secondType_1', ()=>{ /*do something*/ }],
  ['secondType_2', ()=>{ /*do something*/ }],
  ['secondType_3', ()=>{ /*do something*/ }],
  ['secondType_4', ()=>{ /*do something*/ }],
  ['default', ()=>{ /*do something*/ }]
])

const action = actions.get(`${type}_${state}`) || actions.get('default')

我们使用 Map 虽然可以达到相同的效果,我们发现这样稍微复杂了一些,但是我们可以用它来处理更复杂的情况。

Map 类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

我们假设 firstType 中 state 为 1-3 都做相同的事,那么可以这样写:

const actions = new Map([
  ['/^firstType_[1-3]$/', ()=>{ /*do something*/ }],
  ['firstType_4', ()=>{ /*do  something*/ }],
  // ...
  ['default', ()=>{ /*do something*/ }]
])

很显然使用正则表达式能够减少重复的代码, 也能带来更多可能性。

如果对应的方法中出现大量逻辑代码,那么我们可以将 actions 封装为一个函数:

const actions = () => {
    const fn1 = () => {}
    const fn2 = () => {}
    return new Map([
                    ['/^firstType_[1-3]$/', fn1],
                    ['firstType_4', fn2],
                    // ...
                 ])
}

参考资料:

原文地址:https://www.cnblogs.com/guangzan/p/12219207.html

时间: 2024-08-02 17:44:25

代码简洁之道 判断篇的相关文章

代码简洁之道——类

(1)类的组织:一般排列顺序公共静态变量.私有静态变量.私有实体变量.公共函数.公共函数调用的私有工具(函数) (2)类应该短小: 单一权责原则:类或模块只有一条加以修改的理由: 内聚:方法操作的变量也多,内聚性就越高: 保持内聚性就会得到许多短小的类 (3)为了修改而组织:对类加以组织,减低修改的风险 隔离修改:借住接口和抽象类来隔离修改细节带来的影响 DIP 依赖导致原则,类应当依赖于抽象而不是依赖于具体细节 代码简洁之道--类

代码简洁之道:C++ 11 之auto+ for_each + lamda表达式

摘要:在很多中情况下,我们需要这样的运算:给vector中每个元素进行相似的处理(每个元素+1,或者其他).一般情况下,我们会选用for循环,然后然后对每个元素进行处理.实际上,C++ 11提供了了lamda表达式,结合for_each,可以写出更加简洁和高效的代码. 1.for_each.简介 for_each是C++中的模板,具体用法可以参考这里:http://www.cplusplus.com/reference/algorithm/for_each/ 2.lamda表达式 lamda表达

代码简洁之道(判断篇)

第一个例子 if (state === 1) { return true } else if (state === 2) { return true } else if (state === 3) { return true } else if (state === 4){ return true } else { return false } 你首先想到的可能是 使用 switch case, 我们使用 switch case 来改写它: switch (state) { case 1: re

代码简洁之道(1)-年份

1.说明 本文是在阅读一些好的框架的源码时看到的,在此做个记录. 2.具体内容 2.1判断年份是否是闰年 2.1.1前言 为什么会有闰年? 若以陽曆為例,「年」的計算基礎是回歸年,而一個回歸年大約等於365.24220日.因為在平年西曆只計算365日,結果四年後便會累積0.24220×4=0.9688日,大約等於一日,所以便逢四年增加一日閏日以抵銷這0.9688日. 然而,累積4年後多的0.96876天,與真正的1日尚差0.03124天,故如果不間斷地按照4年1閏的方式修正,百年後將累積成365

代码简洁之道与重构

函数篇: 1.函数的功能要单一. 2.函数要短小,  20行封顶最佳. 3.函数参数, 最理想的参数数虽是0,其次是1,再次是2,有足够的理由才能使用三个以上参数.(建议:参数较多时就对参数进行封装) 4.使用异常替代返回错误码.(错误码的处理在代码中非常重要的) 5.函数别重复自己 ,可以把公共的部分封装成接口.

PHP代码简洁之道——SOLID原则

SOLID 是Michael Feathers推荐的便于记忆的首字母简写,它代表了Robert Martin命名的最重要的五个面对对象编码设计原则 S: 单一职责原则 (SRP) O: 开闭原则 (OCP) L: 里氏替换原则 (LSP) I: 接口隔离原则 (ISP) D: 依赖反转原则 (DIP) 单一职责原则 Single Responsibility Principle (SRP) "修改一个类应该只为一个理由".人们总是易于用一堆方法塞满一个类,如同我们在飞机上只能携带一个行

代码简洁之二:函数只做一件事儿

函数应该做一件事.做好这件事.只做这一件事. 所以我们简化代码的一个简单方式就是不断拆分函数(Extract Method),一直拆分,拆分到不能再分出一个函数为止. 拆函数的过程就是一个概括目的.步骤,提取抽象层次动名词的过程.不要做只是解释代码的简单概括,要让函数中的语句处于一个相同抽象层次,如果是更细节的事儿,请再进一步拆分出一个函数出来.让代码拥有自顶向下的阅读顺序. 以我之前写的一个列表显示的action(MVC框架里面的某个控制器里面的一个方法),最开始代码是这样的: // 接收查询

代码简洁之四 统一抽象层次

我是一个phper,但是也写java,ruby,python,go等代码.最近一直focus on coding in clean,觉得抛开语言的门第之见,从思想上总结如何写更优雅代码的方式和方法,也希望阅读了本文的朋友留言讨论.当然我还是用php做代码演示,不过灵感是来自于<代码简洁之道>的java代码. 首先我要提出一个概念:写代码和写文章是完全一样的事情. 文章可以写得短小精悍,也可写得冗余拖沓.可以写得言简意干.调理清晰,也可被写成云里雾里的天书. 同样的现象也会发生在我们写得代码上.

&lt;代码整洁之道&gt;、&lt;java与模式&gt;、&lt;head first设计模式&gt;读书笔记集合

一.前言                                                                                       几个月前的看书笔记,内容全部都是摘自书中比较精辟的句子.笔记都是一段一段的句子,故没有文章的篇幅概念,仅供温习之用,更多详细内容请看原书!!! <代码整洁之道>里面有很多前人编写简洁.漂亮代码的经验.当然书中作者的经验并不100%适合每个人,但大部分都是可借鉴的! <java与模式>这本书内容太多了,我