都说太多if...else不好,可是有哪些优雅的处理方法,你还在写面条代码么!

简介: 都说太多if...else不好,可是有哪些优雅的处理方法,你还在写面条代码么!

都说太多if…else不好,可是有哪些优雅的处理方法,你还在写面条代码么!

在开发过程中,我们经常会遇到大量的if-else语句,特别是在处理复杂的业务逻辑时。

虽然if-else语句是实现逻辑判断的一种有效手段,但是过多的嵌套会导致代码的可读性和可维护性变差为了解决这个问题,我们需要采取一些优雅的方式去处理if-else的嵌套,使代码更加简洁、易于维护。

但是当我们业务逻辑复杂的情况下if…else像堆小山一样,反而可读性和可维护性变差

总结几个缺点:阅读困难、高维护成本、可扩展性差。这时候我们就需要优化自己的代码!

我们先来看一段if…else代码

这里 说一下业务场景三级联动回显(如有需要可以点击跳转详细三级联动) 切割后端返回的code 省市区 后端返回的是一串数字code

let codeNew = []
codeFun(310181882)
codeNew = codeFun(code){
  if (code.tostring().length == 4) {
    return codeNew  = [Number(code.tostring().substring(0, 2), code]
  }
  if (code.tostring().length == 6) {
    return codeNew  = [Number(code.tostring().substring(0, 2),Number(code.tostring().substring(0, 4), code]
  }
  if (code.tostring().length == 9) {
    return codeNew  = [Number(code.tostring().substring(0, 2),Number(code.tostring().substring(0,   4),Number(code.tostring().substring(0, 6), code]
  }
}

这串代码的问题:

1.这一大串要做的事情不明所以,让人很纳闷你为啥要这么做,至少需要一个变量声明一下

2.函数的命名和签名也有问题,codeFun是一个名词,和你主逻辑不太符合。而且函数也不够“纯”,内部修改了一个外部的codeNew

3.里面的Number转化 和 code.tostring()转化一下子就降低了代码的可读性


以上代码很长很繁琐接下来看优化后 使用switch 方法进行优化 —> 本段代码优化大佬

亿点小知识:优化代码使用到switch特性自动寻址 正常的是需要用break进行打断

let codeNew = []
codeNew = getFormCodeArray(310181882)
const getFormCodeArray= (code) => {
  const sub = (str, len) => Number(str.substring(0, len)); // 函数内部定义了一个sub的函数
  const codeStr = code.toString(); // 统一处理
  const codeLen = codeStr.length;
  let res = [sub(codeStr, 2), sub(codeStr, 4), sub(codeStr, 6), code];
  switch (codeLen) {
    case 4:
      res.pop();
    case 6:
      res.pop();
    case 9:
      res.pop();
  }
  res.push(code);
  return res;
};

以上的代码对于大多数的场景还是不适用的 当if…else过多的时候 我们可以使用枚举进行管理

这里我们模拟个场景 做个权限管理

client: 客户 : home

staff:员工 :home,page1,page2

lead :领导 :home,page2,page3, page4

director:总监 :可以查看全部

这个的重点在于 roleIds 是多权限的 或者后面需求更改我们可以很快的进行添加和删除枚举值

枚举出角色的权限

<view v-if="access.includes('home')">home</view>
<view v-if="access.includes('page1')">page1</view>
<view v-if="access.includes('page2')">page2</view>
<view v-if="access.includes('page3')">page3</view>
<view v-if="access.includes('page4')">page4</view>
const accesses = {
    client:['home']
    staff: ['home','page1', 'page2'],
    lead : ['home','page2','page3', 'page4'],
    director: ['home','page1', 'page2','page3', 'page4'],
}
export default {
data(){
  access:accesses['client']// 默认是客户
},
mounted(){
    const roleIds = ['员工','领导']
    if (roleIds.includes("员工")== "员工") {
      this.access = accesses['staff']
    }
    if (roleIds.includes("领导")== "领导") {
      this.access = accesses['lead']
    }
    if (roleIds.includes("总监")== "总监") {
      this.access = accesses['director']
    }
},
}

以上就通过枚举实现了 多角色显示不同的页面

这里我们要注意的是 不是说所有的if…else都要被替代

我们在优化和if…else代码的时候要考虑以是为了提高代码的可读性、可维护性和扩展性:

  • 简单的条件分支:如果代码中的if…else语句仅有一到两个简单的条件分支,没必要改。
  • 高度相关的逻辑分支:复杂的逻辑,如果被分解成多个独立的函数或对象,会失去逻辑的连贯性和上下文含义。

还有一些更高级的写法使用 策略模式 + 工厂模式、查找表模式、职责链模式 无论使用那种方法只要能实现最终的效果就好!

以上就是对if…else 的处理感谢大家的阅读

如碰到其他的问题 可以私下我 一起探讨学习

如果对你有所帮助还请 点赞 收藏谢谢~!

关注收藏博客 作者会持续更新…

相关文章
|
7月前
|
JavaScript 前端开发 开发者
36.3K star!开发者专属PPT神器,Markdown秒变炫酷幻灯片!
Slidev 是专为开发者打造的现代化幻灯片制作工具,基于 Markdown + Vue 技术栈实现。它让技术分享、产品演示、教学培训等场景的幻灯片制作效率提升300%,支持实时编码演示、数学公式渲染、流程图绘制等开发者刚需功能,可将.md文件一键转换为网页/PDF/PPTX格式。
425 4
|
4月前
|
安全 数据库 C#
阿里云最新域名注册和续费、云虚拟主机、企业邮箱收费价格表参考
域名,云虚拟主机,企业邮箱是阿里云旗下的基础产品,2025年截止目前阿里云平台注册.com域名的收费标准是85元,新用户首次注册可享受一定的优惠。本文为大家介绍2025年阿里云在域名注册与续费、云虚拟主机、以及企业邮箱方面的最新收费标准与优惠政策,帮助用户更好的了解自己所需产品的收费标准,以供参考。
|
Java 数据库连接 测试技术
mybatis plus 获取新增实体的主键
mybatis plus 获取新增实体的主键
311 8
|
Java 数据安全/隐私保护 网络架构
一个简单的示例在spring boot中实现国际化
一个简单的示例在spring boot中实现国际化
|
存储 IDE 搜索推荐
解锁Python黑科技:字典树Trie,让你的数据检索快到飞起!
字典树(Trie),又称前缀树或单词查找树,是一种专为字符串快速检索设计的高效数据结构。本文深入探讨了Trie树的基本原理及其在Python中的实现方法,并展示了如何通过插入和搜索操作来提高数据检索性能。Trie树广泛应用于自动补全、拼写检查、IP路由表以及数据压缩等领域,其高效的前缀匹配能力使其成为处理大量字符串的理想选择。通过本文的学习,你将能更好地利用Trie树解决实际问题,提升编程技能。
523 0
|
数据安全/隐私保护
kali下设置root权限(包含很多技巧)
kali下设置root权限(包含很多技巧)
|
负载均衡 关系型数据库 MySQL
MySQL读写分离技术深度解析
在高并发、大数据量的互联网应用环境中,数据库作为数据存储的核心组件,其性能直接影响着整个系统的运行效率。MySQL作为最常用的开源关系型数据库之一,虽然功能强大,但在处理大量并发读写请求时,单点服务器的性能瓶颈逐渐显现。为了解决这一问题,MySQL读写分离技术应运而生,成为提升数据库性能、实现负载均衡的有效手段。
|
存储 Java UED
Spring Boot中的国际化处理
Spring Boot中的国际化处理
|
小程序 JavaScript 前端开发
【原力计划小程序】1、一篇文章深入了解小程序的学习路线(以项目驱动的方式带你学习微信小程序)
🎄 随着社会的发展(四级经典开头😄With the development of society),越来越多的人开始使用微信小程序 🎄 虽然博主从事的是 Java 后台开发,但前端也是我的爱好之一,并且小程序如此好用、小程序如此流行、小程序越来越受到大家的喜爱,我怎能不投其所好?怎能不跟紧社会的步伐呢?📱 🎄 大概是2019年,博主偶然刷到一个讲解微信小程序开发的视频。女老师👩‍🏫介绍到:学习微信小程序需要掌握 JavaScript,于是博主果断放弃了微信小程序开发。当时我大二,啥也不会,只知道玩:video_game:,不挂科就不错了,完全不会写代码👨‍💻) 🎄 大
588 0
【原力计划小程序】1、一篇文章深入了解小程序的学习路线(以项目驱动的方式带你学习微信小程序)
|
安全 Java 应用服务中间件
吊打 Tomcat ,Undertow 性能很炸!!
吊打 Tomcat ,Undertow 性能很炸!!
1104 0
吊打 Tomcat ,Undertow 性能很炸!!