ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

代码简洁之道 判断篇

2020-01-20 19:53:35  阅读:308  来源: 互联网

标签:do 简洁 return 代码 else 之道 state firstType something


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],
                    // ...
                 ])
}

参考资料:

标签:do,简洁,return,代码,else,之道,state,firstType,something
来源: https://www.cnblogs.com/guangzan/p/12219207.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有