人文艺术 > 为什么很多程序员不用switch,而是大量的if……else if?

为什么很多程序员不用switch,而是大量的if……else if?

2020-10-03 13:38阅读(62)

为什么很多程序员不用switch,而是大量的if……else if?:相比之下Switch可以让人更宏观的去分析代码。编写代码和阅读代码需要宏观和微观两种视角,宏观看架构和

1

相比之下Switch可以让人更宏观的去分析代码。编写代码和阅读代码需要宏观和微观两种视角,宏观看架构和数据走向,微观看语法和功能的片段。

有些朋友编码喜欢走一步看一步,越往后越发现前面留了好多坑需要后期再做进一步修正。有些朋友不把数据的分支想全面就会用很多if…else…来磊代码。

不是不想用Switch,只是因为编码时,太随性。所以想做专职的开发人员,对代码的宏观视角是必不可少的,并且编码时还要为今后的修改留有余地。

2

答案:主要因为switch不适合业务系统的实际复杂需求,业务不断的变更迭代,一更改需求,条件的复杂度高了,switch无力处理。

switch优点

那么什么时候适合switch,它的场景是:基于单一变量的值(如枚举),这样的可读性比if条件更清晰。

switch缺点

从上面的场景来看,实在太局限,我来简单说一下它的一些缺点吧:

1. 现实的业务场景很复杂,条件不单一,一旦需求变更,维护代码相当崩溃。

2. switch经常忘记写break,估计很多人一不小心就忘记写了。如果你看过google的代码规范,你会发现,Google对switch的要求非常多。

switch的封装才更灵活


其实switch有人还在用也有一部分是历史原因,但是随着科技的发展,原有的设计以及落后了。

有些编程语言,如Python都没有switch这种语法。当然也有部分新语言Golang和Kotlin还是继承下来,但是又把switch包装了一下,去掉了令人误会的语法,这才让switch变得灵活起来了。 如果不封装,很难用。

IF语句的好处

通过上面描述的缺点也就是if语句更灵活的地方,根据业务进行逻辑条件编写,可维护性高。同时只要写的代码质量高,可读性也就会更高。

建议

现实的业务实际是很复杂的,我也不建议一定要用大量的if……else if,而是应该尽早返回来减少嵌套,这样增加了可读性以及降低维护的成本。

3

为什么很多人纠结于这些问题?什么用if。。。else。。。什么不能用goto之类的?

这些人真的做过项目吗?

谁说程序员不用switch的?大量的if。。。else有什么问题吗?

以这些初级到不能再初级的问题来划分一个程序员的好坏,来判定能力的高低吗?

我从来不觉得有什么语句是优于其他语句的,也不觉得什么语句是能用或者不能用的。都得放到实际项目中去。满足项目需要是第一要素。

如果有一个程序员能把一个项目全部都用if。。。else完成,我觉得也是很牛逼的。我曾经就全部用if。。。else完成了一个条件分支还算比较多的功能(闲的蛋疼),分支一多,这些判据之间的逻辑关系会让人脑壳疼。离职时转给其他同事的时候这部分就非常头疼。你说这部分难吧,也不难,语法简单逻辑清晰。但是要做什么改动吧,好像也不太敢,条件太多了,牵一发而动全身啊。我估计这代码传个两三代,要么彻底推倒重写,要么就变成了祖传代码。。。

4

switch只能用于简单判断,不支持表达式。

没有if else 使用方便。

5

作为程序员来说,我更喜欢switch的结构,更直观更容易找到相应的代码块。不过为什么很多程序员不用Switch,而是使用大量的if...else if的结构,甚至像Python已经不支持原生Switch语法了?

这个原因很简单,因为switch语法结构最后编译还是通过if...else if来完成代码的,所以从效率角度来说和if...else if一样的。但是switch对比条件比较单一,绝大多数支持switch的编程语言都支持等于比较,也就是说变量只能等于case中的条件才会执行代码块。但是现实情况中,对比条件绝大多数比单一等于运算要复杂得多,因此很多程序员就直接使用if...else if。但是if...else if的结构,后期维护起来会比较不清晰,毕竟没有Case...Break那么直观。但是添加一些注解应该还是能解决这个问题的。

所以,我现在能使用Switch的时候还是会使用switch,毕竟后期代码维护起来方便点。不过更多时候还是用if...else if。

6

因为最开始情况少,几个else if没了,后面增加需求,情况复杂了,程序员一直加所以多了

7

国内程序员只要能把程序弄出来好用就行了,谁还在意代码的严谨和运行速度呢?同样的多分支判断,switch比else if强太多了,比如10个分支判断,前者判断一次,后者依次判断10次!

8

不是尽量别用,而是不合适没法用,合适得时候该用还是用。

比如说,变量i要求大于10,小于20,一条if(i>10&&i<20)就解决了问题,如果用switch,那岂不是自找麻烦。

又如变量i有5个固定返回值,10,20,30,40,50,那么用switch比较适合,用if也可以。

对于多变量判断,多重判断,复杂判断,还是靠if,switch几乎无能为力。

所以,switch多用在简单的枚举,对于很复杂的条件判断几乎无能无力,if则用在所有判断时候。简单的枚举又不很多,所以if最常见

9

会提这个问题的,估计根本没多少开发经验。实际项目中,基本上都是用if的。

我就直接说最关键的原因吧: switch 只能对一个变量进行处理,但是实际情况是业务逻辑通常需要判断多个变量。

一些人可能会说,当前就一个判断一个变量啊,可以用swich。然而,这个想法也是局限性的,因为要考虑后期可能会增加变量来判断。仅仅少数情况才可以用switch, 大部分都建议用if

10

首先题外话不用switch是因为没钱。

其次,switch用法特殊,一般用于固定的几个值去比较判断,要是你来个复合逻辑表达式就不太好写。而且,switch不直观,代码层次也没有if else简单明了,每个里面还要用break中止。且实际编写代码过程中能用switch的,用if else均能替代。有点类似continue,鸡肋。

最后,并不是所有编程语言都有的switch,为什么没有?因为有替代啊