Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 条件运算符vs if-then-else_C#_Java_C++_C_Conditional - Fatal编程技术网

C# 条件运算符vs if-then-else

C# 条件运算符vs if-then-else,c#,java,c++,c,conditional,C#,Java,C++,C,Conditional,如果我想实现一些可以用这两种方法实现的条件代码。那么哪种方法更好?或者如果..那么..否则..如果不完全相同,它们非常接近。即使字节码有细微差别,您也可以随时进行性能测试 要检查字节码,请检查javap和jad,具体取决于它。通常,您希望活动的主要流程 在代码的结构中表示。如果关键点 该算法的关键是初始化变量x,然后 最好的解决方案是使用条件运算符: x = condition ? f1() : f2(); 如果决策是理解问题的关键 继续,那么您将更喜欢if。实际上,这意味着 当两者都合理可行

如果我想实现一些可以用这两种方法实现的条件代码。那么哪种方法更好?或者如果..那么..否则..

如果不完全相同,它们非常接近。即使字节码有细微差别,您也可以随时进行性能测试


要检查字节码,请检查javap和jad,具体取决于它。通常,您希望活动的主要流程 在代码的结构中表示。如果关键点 该算法的关键是初始化变量
x
,然后 最好的解决方案是使用条件运算符:

x = condition ? f1() : f2();
如果决策是理解问题的关键 继续,那么您将更喜欢
if
。实际上,这意味着 当两者都合理可行时,您将使用
?:
。这个 关键是“合理”——如果您发现您正在使用 子表达式中的逗号运算符,其中 副作用,然后使用
?:
可能是不“合理的”

编辑: 当您使用
?:
运算符时,除了最简单的 在这种情况下,您应该完全按照
if
的格式对其进行格式化,例如:

x = condition
    ? complex_expression_1
    : complex_expression_2;
我经常这样做。(有一种特殊情况,我推 它:如果我能将整个函数缩减为一个返回 声明。我仍然不允许逗号的副作用 运算符,但我有时会使用更复杂的表达式
这取决于编译器,但在现代编译器中,if-else和三元运算符之间没有区别。不要相信“如果我使用条件运算符,编译器将始终生成更高效的代码”

取决于你想做什么。如果没有更多的信息,这个问题实际上是不可回答的(甚至是主观的)。@BhavikShah:因为有些情况更适合
?:
,有些情况更适合
,如果
/
或者
。你可能想用你正在使用的任何语言来标记你的问题。@shivaparek:这取决于所讨论的用途。如果你真的不能决定,并且没有任何其他信息,请选择
If
/
else
;这会让更多的白痴感到困惑。但这两种方法都能很好地发挥作用,如果使用
if
/
else
where?:会更有意义,只是在我看来没有意义。@BhavikShah如果他问起性能问题,我会非常惊讶。应该没有区别,即使有,可读性和可维护性也更重要。除非编译器完全崩溃,否则选择对性能的影响应该为0。问题是更好,而不是更快,所以他显然是在问可读性和可维护性,而不是性能。除了表演之外。它们是做不同工作的不同工具。+1“合理”的另一个标准(除了逗号运算符或副作用外)是条件或子表达式的长度或复杂程度,以致于随便阅读代码的人很难识别表达式的整体结构。(也许这就是你用逗号运算符得到的结果,但问题比这更一般。)@TedHopp你会惊讶地发现,好的格式会让你觉得合理。因为格式在注释中消失。我将编辑我的答案以给出一个例子。@JamesKanze很好的解释,还有一件事我想问,编译器的词法分析呢?对于if-then-else,它可能必须跳转一些行,以毫秒为单位,但时间可能比分析要长?:语句否?我同意,通过仔细的缩进,即使是多重嵌套的三元表达式也非常可读。然而,使用ctrl-shift-f时,窗口中的格式设置会如此小心,这也令人惊讶。(例如,Eclipse中默认的Java自动格式设置不会保留缩进良好的示例。不知道C/++/#)即使您设法将IDE设置为保留此设置,下一个需要维护代码的人也可能不会。再见,可读性。@TedHopp我有时会添加额外的括号,以便vim保留格式。但总的来说:通常最好不要重新格式化已经格式化的内容,因为没有一个自动格式化程序是完美的。