If-Else 还是 Switch-Case:选择哪一个?
本文最初发表于Dasha
如果您感兴趣的话,Dasha 是一个对话式 AI 即服务平台,可让您将逼真的语音和文本对话功能嵌入到您的应用或产品中。立即免费开始构建!
如果您是编程和 JavaScript 的新手,您可能会对使用哪种条件语句感到困惑,尤其是在 if-else 和 switch-case 语句之间。
我第一次学习条件语句的时候,觉得它很简单,用 if-else 或 switch 语句都可以。但是,当我进一步了解这个主题,并尝试将其应用于一些问题时,我开始困惑,不知道应该使用哪一个,它们之间到底有什么区别,以及如何选择正确的语句。
我努力理解这两个条件语句的区别和应用,并深入研究了这个主题。
在本文中,我将解释这两个概念并提供比较图表,以便您了解如何根据复杂程度在不同场景中使用 if-else 和 switch-case。
在深入细节之前,让我们先回顾一下为什么在程序中使用条件语句。
作为人类,我们时刻都在做出各种影响生活的决定。例如,如果我们有空闲时间,就必须决定做什么:是休息、看点什么、给别人打电话,还是做一些有意义的事情。
条件语句允许我们根据 JavaScript 中的条件做出这样的决定。如果条件为真,我们可以执行一个操作;否则,我们可以执行另一个操作。
因此,if-else 和 switch-case 都允许我们根据条件做出这些决定。如果你想复习一下条件判断的工作原理,请查看这篇MDN 文章。
if-else 和 else-if 语句
作为新手,我们都喜欢 if-else 语句!😂
If-else 语句接受特定条件,并检查该条件是否为真。如果条件为真,则该if
语句执行特定的代码块。如果条件为假,则该else
语句执行不同的代码块。
让我们举一个简单的例子来了解它是如何工作的。
场景一
假设您是五年级 C 班的班主任。您需要根据学生的成绩检查他们的成绩,并且只需要检查该学生是通过还是未通过。让我们使用 if-else 语句根据学生的成绩检查其中一名学生的成绩。
function studentGrade(marks) {
if (marks >= 50) {
return "You have passed the exam! 🥳";
} else {
return "You have failed the exam!";
}
}
console.log(studentGrade(75)); // "You have passed the exam! 🥳"
根据上面的例子,我们编写了一个简单的函数,它接收学生的成绩并检查其是否高于 50 分或低于 50 分。如果输入的成绩高于 50 分,则if
执行该代码块。如果低于 50 分,则else
执行该代码块。
场景二
现在,想象一下更进一步,根据学生的具体成绩给出结果。例如,如果学生获得了“A+”,则会收到“Nailed It! 🥳”。如果学生获得了“D”,结果将是“Failed 😢”。
为了有这样的多个选择,我们可以使用 else-if 语句来链接额外的选择。
请参阅下面根据第二种情况使用 else-if 语句编写的代码。
function studentFinalResultIf(grade) {
if (grade === "A+") {
return "Nailed It! 🥳";
} else if (grade === "A") {
return "Passed 💃";
} else if (grade === "B+") {
return "Passed 💃";
} else if (grade === "B") {
return "Passed 💃";
} else if (grade === "C") {
return "Barely Survived 😌";
} else if (grade === "D") {
return "Failed 😢";
} else {
return "Failed 😢";
}
}
cconsole.log(studentFinalResultIf("A+")); // "Nailed It! 🥳"
根据上述函数,我们使用不同的条件语句来根据学生的年级提供成绩。除了第一个代码块(即代码块)之外if
,所有其他条件均在else if
代码块中测试。如果所有条件都不成立,则最后一个else
代码块将执行其代码块。
Switch 语句
switch 语句是一个多选语句。一旦你给出了选项以及每个选项的相关表达式,它就会逐一查找所有选项,直到找到与表达式匹配的选项并执行它。
让我们使用 switch 语句重写第二种场景。
function studentFinalResultSwitch(grade) {
switch (grade) {
case "A+":
return "Nailed It! 🥳";
case "A":
case "B+":
case "B":
return "Passed 💃";
case "C":
return "Barely Survived 😌";
case "D":
return "Failed 😢";
default:
return "Failed 😢";
}
}
console.log(studentFinalResultSwitch("A+")); // "Nailed It! 🥳"
在上面的例子中,我们有一个包含多个选项的主条件。当我们检查特定成绩时,它会检查该成绩所属的表达式,然后运行该 case 块。在本例中,当成绩为“A+”时,它会运行case "A+":
并返回结果“Nailed It! 🥳”。
现在你可能会觉得 if-else 和 switch 语句非常相似,而且 if-else 似乎更易于使用。而且你可能有自己的理由选择其中一种。所以在下结论之前,让我们先来看看 if-else 和 switch 语句之间的区别。
比较图
基本术语 | 如果-否则 | 开关盒 |
---|---|---|
检查测试表达式 | if-else 语句可以根据一系列值或条件测试表达式。 | switch 语句仅基于单个整数、枚举值或字符串对象测试表达式。 |
非常适合 | if-else 条件分支非常适合产生布尔值的变量条件。 | Switch 语句非常适合固定数据值。 |
跳转表的创建 | 在 if-else 情况中,我们不创建跳转表,所有情况都在运行时执行。 | 在 switch case 中,我们在编译时创建跳转表,仅在运行时执行选定的 case。 |
搜索类型 | 如果否则实现线性搜索。 | Switch实现二进制开关。 |
条件与表达式 | 存在不同的条件是可能的。 | 我们只能有一个表情。 |
评估 | If-else 语句评估整数、字符、指针或浮点类型或布尔类型。 | Switch 语句仅评估字符或整数值。 |
执行顺序 | 要么执行 if 语句,要么执行 else 语句。 | Switch case 语句逐个执行 case,直到出现 break 语句或到达 switch 语句的末尾。 |
默认执行 | 如果 if 语句中的条件为假,则默认情况下,将执行 else 语句(如果创建)。 | 如果 switch 语句中的条件与任何情况都不匹配,则对于该实例,如果创建了 default 语句,则会执行该语句。 |
价值观 | 值基于约束。 | 价值取决于用户的选择。 |
使用 | 它用于评估条件为真或假。 | 它用于测试同一变量或表达式的多个值,如 1、2、3 等。 |
编辑 | 如果使用嵌套的 if-else 语句,则很难编辑 if-else 语句 | 编辑 switch case 非常容易,因为它们很容易识别。 |
根据以上比较,您可以看到选择哪个条件语句取决于场景及其复杂性。例如,对于第二种情况,我们可以同时选择 if-else 和 switch 语句,因为我们只检查一份报告,除了可读性之外,这可能不会对性能产生任何影响。
让我们更进一步,让我们的场景变得稍微复杂一些。
场景三
如果我们想打印所有班级所有学生的成绩怎么办?假设五年级有十个班,每个班有 50 名学生。所以总共需要检查并打印大约 500 名学生的成绩。
如果我们使用 if-else 语句,可能会遇到轻微的性能延迟。这是因为在执行过程中,if-else 语句始终会执行表达式来检查条件是否满足。当需要检查的条件更多且选择变得复杂时,速度就会变得更慢。
另一方面,switch 语句的执行速度相对较快,因为编译器在编译时会为 switch-case 语句生成跳转表。因此,代码运行时,它只需决定应该执行哪些 case,而不是检查哪些 case 满足条件。在我们的第三个场景中,为了生成许多学生的报告,switch-case 可能是更好的方法。
我希望现在你能理解,基于上面的比较和我们的示例,这两个语句在代码中都有其适用之处,你可以自行选择适合哪种场景的语句。没有正确或错误的方法。
那么我们如何选择使用哪个语句呢?
选择其中之一并不那么简单。以下是一些选择技巧:
您可以在以下情况下使用 if-else:
- 条件结果为
boolean
。 - 条件很复杂。例如,您的条件包含多个逻辑运算符。
您可以在以下情况下使用 switch-case:
- 一个表达式有多种选择。
- 该条件基于一组预定义的值,例如枚举、常量、已知类型。例如,错误代码、状态、状态、对象类型等。
因此,您需要根据性能、可读性、可理解性和可变性来决定使用 if-else 语句还是 switch 语句。当您阅读和编写更多代码时,最终您将开始弄清楚哪种语句适合哪种场景;这需要实践。
此外,如果您想尽可能避免条件,还有更多方法,特别是在 JavaScript 中;数组查找或对象查找是几种常见的方法。
总结
作为新手,你可能会对何时使用哪个语句感到困惑,但随着练习的增多,你会越来越熟练。请记住,每种情况都需要特定的解决方案,并没有绝对的正确或错误答案。你需要根据自己的经验选择合适的解决方案。因此,我希望这里提供的比较能帮助你更容易地识别 if-else 和 switch 语句之间的区别,而不是偏袒任何一方。
如果你唯一的工具是一把锤子,你就会倾向于把所有问题都看成钉子——亚伯拉罕·马斯洛
编码愉快!
参考:
加入Dasha 开发者社区,您将遇到志同道合的开发者,他们会分享想法、问题,并获得构建酷炫的对话式 AI 应用程序所需的所有帮助(当然是免费的)。