有办法干掉if else吗? ----- 来自群友斌哥

292 阅读2分钟

前言

源于一次群里,群友斌哥提出的问题,不知道为啥他不想用if-else了,然后我们开始给他出主意。

聊天截图

要实现什么样的功能?

从上图看,是我点击了b然后在b中执行了a 如果a返回false则b调用a后面的数据就不在执行了,那么在我看来直接就使用if解决了

如下面代码

<template>
	<view class="container">
    	<button type="default" @click="b">干了</button>
    </view>
</template>

export default {
	data(){
    	return {
        }
    },
    methods:{
    	a(){
        	return false
        },
        b(){
        if(this.a()){   //这里的if是斌哥不想要的
        this.a();
            console.log('我是b')
        }
        	
        }
    }

}

但是斌哥提出不想用if,那么我们还可以使用,什么方法呢,我给出的解决方法是用 && 符号

解决方法

使用&&符号,以下可以改写下

原理:a&& b :如果执行a后返回true,则执行b并返回b的值;如果执行a后返回false,则整个表达式返回a的值,b不执行;

<template>
	<view class="container">
    	<button type="default" @click="b">干了</button>
    </view>
</template>

export default {
	data(){
    	return {
        }
    },
    methods:{
    	a(){
        	return false;
        },
        b(){
     	 this.a() && console.log('我是b');
        }
    }

}

但是斌哥又说不好看,我想都那么简洁了 还怎么不好看了 !!!!

这是斌哥发出了他的代码

看了下,斌哥嫌长了影响阅读,我回说你加注释不久行了,我想了下其实还是可以再改写下,本质不就是再短点吗

<template>
	<view class="container">
    	<-- 这里执行的b改为了c-->
    	<button type="default" @click="c">干了</button> 
    </view>
</template>


export default {
	data(){
    	return {
        }
    },
    methods:{
    	a(){
        	return false;
        },
        b(){
     		this.model().then((res)=>{
              this.api()
            })
        },
        c(){
        // 这样不就短了吗
         this.a() && this.b();
        }
    }

}

使用三元运算符

直接上代码

<template>
	<view class="container">
    	<-- 这里执行的b改为了c-->
    	<button type="default" @click="c">干了</button> 
    </view>
</template>


export default {
	data(){
    	return {
        }
    },
    methods:{
    	a(){
        	return false;
        },
        b(){
     		this.model().then((res)=>{
              this.api()
            })
        },
        c(){
        // 这样不就短了吗
         this.a()?this.b():console.log("我结束了");
        }
    }

}

使用switch

<template>
	<view class="container">
    	<-- 这里执行的b改为了c-->
    	<button type="default" @click="c">干了</button> 
    </view>
</template>


export default {
	data(){
    	return {
        }
    },
    methods:{
    	a(){
        	return false;
        },
        b(){
     		this.model().then((res)=>{
              this.api()
            })
        },
        c(){
        // 这样不就短了吗
        let result = this.a();
        switch(result):{
        	case true:
            	this.b()
            	break;
            case false:
            	console.log("做个错误记录吧")
            	break;
            default:
            console.log("拜拜")
        }
         this.a()?this.b():console.log("我结束了");
        }
    }

}

使用||符号好像也可以

原理:a || b :如果执行a后返回true,则整个表达式返回a的值,b不执行;如果执行a后返回false,则继续执行b并返回b的值;

代码改写如下

<template>
	<view class="container">
    	<-- 这里执行的b改为了c-->
    	<button type="default" @click="c">干了</button> 
    </view>
</template>


export default {
	data(){
    	return {
        }
    },
    methods:{
    	a(){
        	return false;
        },
        b(){
     		this.model().then((res)=>{
              this.api()
            })
        },
        c(){
        // 这样不就短了吗
         !this.a() || this.b();
        }
    }

}