为什么程序员不喜欢使用switch,但是很多if ... else if?

来源:3g.163.com/tech/article/E02RDE6C0511SDDL.html缺点1.纠正语法和逻辑错误。

缺点2.语法严格。

缺点3.需要子功能来处理分支交换机的优点。

请花费5秒钟的时间查看以下内容:代码中是否存在错误。

好的,熟练的程序员应该已经找到了错误。

我没有在第8行和第10行下添加关键字break。

这导致该代码的行为逻辑与我的原始设计不一致。

缺点1.语法正确,逻辑错误。

这是程序员很少使用switch进行条件判断的第一个原因。

对于新手来说,忘记写休息确实很常见,即使老猿忘记写了,也会不时发生。

无法在许多语法检查器上检查此语法错误,因为从语法角度来看它是正确的!但是代码的处理逻辑是错误的!如果使用if重写此代码,则不会发生此错误。

为了确保上述代码的正确性,我添加了else进行逻辑保证。

实际上,如果您不编写其他代码,则此代码不会有逻辑错误。

一旦我忘记写花括号,语法编译器就会提示我。

此外,您甚至可以使用eslint之类的工具来强迫我使用花括号,这样我就不会犯语法错误。

一旦发生错误,对我来说这肯定是一个逻辑问题。

缺点二。

尽管刚性语法开关很容易破译,但对判断条件却非常严格。

大小写只能跟随常量。

如果用C编写,则只能将int类型用作判断条件。

对于像我们这样的程序员,这种限制太麻烦了。

如果使用if,更不用说常量了,那么我可以使用函数,这确实方便快捷。

劣势三。

需要一个子功能来处理分支。

该缺点与第一个缺点有关。

为了防止丢失中断,建议将分支处理方法分成一个子函数来处理,以便在读取代码时减少忘记写入中断的情况。

如果您使用if写,我可以写任何我想写的东西。

它是非常自由和任意的,但是这也导致代码的可读性大大降低。

开关的优点由于开关具有如此严重的缺点,因此如何在所有语言中仍然存在呢?让我们谈谈切换的优势。

它的优点恰好是缺点。

很久以前,当计算机性能不如小霸王学习机时,为了提高计算机的处理速度,智能计算机科学家简化了一些逻辑分支处理方法,以及一些需要逻辑判断的操作来修复它,然后只需一张一张地查找表并做出相应的反应。

例如,如果判断a = 0,则在cpu上处理的方式切换和if是不同的。

只要将a直接映射到子功能的地址,Switch就会在编译阶段将子功能的地址绑定到判断条件。

只是执行它,但是if处理是不同的。

首先将a的值放入CPU的寄存器中,然后将比较后的值放入CPU的另一个寄存器中,然后进行减法,然后跳转到子功能以根据计算结果执行。

还有另外三个操作。

如果有更多的逻辑判断,那么操作将比切换多很多倍。

尽管寄存器的操作速度非常快,但是对于当时的学习机来说,这个速度还不够。

然后还有另一个问题,为什么要用断断续续来判断呢?容易引起语法错误吗?然后是子功能的问题。

在早期的计算机代码中,没有子功能的概念。

当时,goto被用来随意跳跃。

如果要转到第10行代码,goto 10非常简单。

这种编程思想在C的早期仍然受到影响。

因此,早期的C没有子功能。

这是一堆混乱的逻辑处理过程。

后藤在天上飞。

因此,那时,如果没有最强大的大脑,您将无法编写程序。

的。

为了告诉程序条件判断过程已结束,我添加了break作为终止符号。

后来,有了子例程和更好的编程规范,我逐渐将代码编写工作减少到体力劳动。

为了宣传其血统书,后来开发的新语言不得不或多或少地引用C,然后继承了switch的怪异语法。

但并非所有语言都被复制。

例如,谷歌,golang和kotlin发明的新语言,再次包装了开关,消除了误解的语法,并使开关更加灵活。

顺便说一下,在代码重构中。

使用开关时,看起来代码更简洁