我一直想知道这件事已经有一段时间了.我到目前为止还不是一个核心程序员,主要是小型Python脚本,我写了几个分子动力学模拟.对于真正的问题:switch语句有什么意义?你为什么不能只使用if-else语句?
感谢您的回答,如果之前有人询问过,请指向我的链接.
编辑
S.Lott指出,这可能是问题If/Else vs. Switch的重复.如果你想关闭然后这样做.我将把它留待进一步讨论.
2009-12-04更新:有关在此处发布的一些建议的分析结果,请参阅下文!
考虑以下非常无害,非常简单的方法,它使用switch语句返回定义的枚举值:
public static MarketDataExchange GetMarketDataExchange(string ActivCode) {
if (ActivCode == null) return MarketDataExchange.NONE;
switch (ActivCode) {
case "": return MarketDataExchange.NBBO;
case "A": return MarketDataExchange.AMEX;
case "B": return MarketDataExchange.BSE;
case "BT": return MarketDataExchange.BATS;
case "C": return MarketDataExchange.NSE;
case "MW": return MarketDataExchange.CHX;
case "N": return MarketDataExchange.NYSE;
case "PA": return MarketDataExchange.ARCA;
case "Q": return MarketDataExchange.NASDAQ;
case "QD": return MarketDataExchange.NASDAQ_ADF;
case "W": return MarketDataExchange.CBOE;
case "X": return MarketDataExchange.PHLX;
case "Y": return MarketDataExchange.DIRECTEDGE;
}
return MarketDataExchange.NONE;
}
Run Code Online (Sandbox Code Playgroud)
我和我的同事今天就如何更快地实现这个方法的几个想法进行了斗争,并且我们想出了一些有趣的修改,实际上相当显着地提高了它的性能(当然,按比例说).我有兴趣知道那里的其他人可以想到哪种优化可能没有发生在我们身上.
接下来,让我简单地提供一个快速免责声明:这是为了好玩 …
请考虑以下示例代码:
class MyClass
{
public long x;
public void DoWork()
{
switch (x)
{
case 0xFF00000000L:
// do whatever...
break;
case 0xFFL:
// do whatever...
break;
default:
//notify that something going wrong
throw new Exception();
}
}
}
Run Code Online (Sandbox Code Playgroud)
忘掉片段的无用性:我的疑问是关于switch声明的行为.
假设该x字段只能有两个值:0xFF00000000L或0xFFL.上面的开关不应该属于"默认"选项.
现在想象一个线程正在执行"x"等于0xFFL的开关,因此第一个条件将不匹配.同时,另一个线程将"x"变量修改为0xFF00000000L.我们知道64位操作不是原子操作,因此变量首先将较低的dword置零,然后将较低的dword置零(反之亦然).
如果在"x"为零时(即在新的分配期间)完成开关中的第二个条件,我们是否会陷入不希望的"默认"情况?
我正处于在.Net中创建MP4标记解析器的最后阶段.对于那些有标记音乐经验的人,您会发现平均有30个左右的标签.如果测试了不同类型的循环,似乎带有Const值的switch语句似乎是关于以二进制方式捕获标记的方法.
这个开关允许我搜索二进制文件,而不需要知道标签的存储顺序,或者是否有一些不存在,但我想知道是否有人会反对使用switch语句来处理这么多条件.
任何见解都非常感谢.
编辑:有人认为我现在应该补充说,在讨论这个函数是递归的时候,我应该提取这个条件并将数据传递给我可以杀死的方法吗?
是否存在switch(case)是战略或类似模式的良好设计选择(简单除外)的情况......
可能重复:
If/Else vs. Switch
我这里有两个代码,我只想问两个中哪一个在可写性(编写代码的简易性)和可读性(易于理解代码)方面更好.
切换情况:
import java.io.*;
public class Quarter{
public static void main(String[] args){
int day;
String input="";
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Input a number from 1 to 3: ");
try{
input=in.readLine();
}catch(IOException e){
System.out.println("Error!");
}
day=Integer.parseInt(input);
switch(day){
case 1:
case 2:
case 3:
System.out.println("1st Quarter");
break;
case 4:
case 5:
case 6:
System.out.println("2nd Quarter");
break;
case 7:
case 8:
case 9:
System.out.println("3rd Quarter");
break;
case 10:
case 11:
case 12:
System.out.println("4th Quarter");
break;
default: System.out.println("Error!"); …Run Code Online (Sandbox Code Playgroud) 开关似乎没那么无用,因为它们可以用if-else语句替换,它可以做的不仅仅是匹配一个char/int/enum等.我只能想到一个很好用于一个开关,那将是解释命令线args.
switch语句有哪些实际用途?
考虑到if if if或switch case时,哪一个更好
我针对其他语言查看了一些与此相关的问题,有些建议使用,final但这似乎不适用于 Dart。
我正在传递参数,所以 switch 语句肯定不能只包含常量吗?switch语句,如果一个很像语句问,如果它是或not..ie它是未知的,所以我看不出他们是否有是常数switch语句可能是有用的......?
setCategory(arga, argb) {
int result;
switch (true) {
case (arga >= 0 && arga < 3 && argb < 35):
result = 16;
break;
case (arga >= 0 && arga < 3 && argb >= 35):
result = 15;
break;
etc
Run Code Online (Sandbox Code Playgroud)
它返回Case expressions must be constant有关 case 表达式中 arga 和 argb 值的错误。解决此问题的最佳方法是什么,还是必须使用 if 语句?
我正在逐步完成两个不同的代码块,以了解switch语句和语句之间的执行差异if.
虽然if似乎检查每一个条件,但switch似乎直接跳到评估为true的条件.在预检之前,编译器如何知道哪个语句将评估为true?请看下面的代码:
public void IFvSwitch()
{
string x = "f";
switch (x) // Compiler skips directly to case "f":
{
case "a":
MessageBox.Show(x);
break;
case "b":
MessageBox.Show(x);
break;
case "f":
MessageBox.Show(x);
break;
}
if (x == "a") // Compiler checks all conditions
{
MessageBox.Show(x);
}
else if (x == "b")
{
MessageBox.Show(x);
}
else if (x == "f")
{
MessageBox.Show(x);
}
}
Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×2
if-statement ×2
atomicity ×1
dart ×1
flutter ×1
java ×1
optimization ×1
parsing ×1
performance ×1