减少if-else多重嵌套小技巧

在日常的代码编写中,相信大家或多或少都接触过拥有庞大if else的项目代码吧,多重嵌套的if else在维护的时候真的很让人恼火,一个bug排查下来,感觉身体被掏空。接下来将介绍几种在某些特定场景下代替if else的思路,并增加我们代码的可读性。

一、短路运算

Javascript的逻辑或 || 的短路运算有时候可以用来代替一些比较简单的if else,若左边能转成true,则返回左边式子的值,反之返回右边式子的值。

下面用一个简单的案例来表述:

let c
if(a){
  c = a
}else{
  c = b
}

上面代码的书写简直就是强迫症患者的噩梦,明明就是一个很简单的判断却需要写好几行代码才能实现。这个时候就可以用短路运算去简化这一段代码了。

let c = a || b

二、三元运算符

三元运算符相信大家都很熟悉,很多时候简单的一些判断我们都可以使用三元运算符去代替if else,这里只推荐一层三元运算符,因为多层嵌套的三元运算符也不具备良好的可读性。

例子:条件为true时返回1,反之返回0。

const fn = nBoolean => {
  if(nBoolean){
    return 1
  }else{
    return 0
  }
}

// 使用三元运算符
const fn = nBoolean => {
  return nBoolean ? 1 : 0
}

三元运算符使用的地方也比较多,比如:条件赋值、递归...

// num值在nBoolean为true时为10,否则为5
let num = nBoolean ? 10 : 5

// 求0-n之间的整数的和
let sum = 0
const add = n => {
  sum += n
  return n >= 2 ? add(n - 1) : sum
}
let num = add(10) // 55

三、switch case

上述的两种方式:短路运算符和三元运算符虽然很好用,代码也很简洁,不过都只能用于简单的判断,遇到多重条件判断就不能使用了。

对于switch case,虽然它的可读性确实比if else更高,但是我想大家应该都觉得它写起来比较麻烦吧。

例:有A、B、C、D四种类型,在A、B的时候输出1,C输出2、D输出3,默认输出0。

let type = 'A'

// if else if
if(type === 'A' || type === 'B'){
  console.log(1)
}else if(type === 'C'){
  console.log(2)
}else if(type === 'D'){
  console.log(3)
}else{
  console.log(0)
}

// switch case
switch(type){
  case 'A':
  case 'B':
    console.log(1)
    break
  case 'C':
    console.log(2)
    break
  case 'D':
    console.log(3)
    break
  default:
    console.log(0)
}

四、对象配置/策略模式

对象配置看起来跟策略模式差不多,都是根据不同的参数使用不同的数据/算法/函数。策略模式就是将一系列算法封装起来,并使它们相互之间可以替换。被封装起来的算法具有独立性,外部不可改变其特性。

接下来我们用对象配置的方法实现一下上述的例子:

let type = 'A'

let tactics = {
  'A':1,
  'B':1,
  'C':2,
  'D':3,
  default:0
}
console.log(tactics[type]) // 1

let strategies = new Map[
  ['A',1],
  ['B',1],
  ['C',2],
  ['D',3],
  ['default',0]
]
const calculate = (type = default) => {
  return strategies.get(type)
}
console.log(calculate('A')) // 1

本文主要是想传递一种思想,我们有很多的方法去优化我们的代码,提高我们代码的可读性,对if else并没有歧视的意思,只是我们的代码中不仅仅只有if else。

posted @ 2022-12-30 11:28  阿彬~  阅读(517)  评论(0编辑  收藏  举报