效率 ?这些代码之间有啥区别吗? [复制]
Posted
技术标签:
【中文标题】效率 ?这些代码之间有啥区别吗? [复制]【英文标题】:Efficiency ? any difference between these codes ? [duplicate]效率 ?这些代码之间有什么区别吗? [复制] 【发布时间】:2012-05-22 00:27:23 【问题描述】:可能重复:Is there a difference between i==0 and 0==i?
以下编码风格有什么好处,它们之间有什么区别吗?
int i;
// more code
if (i == 0) ...
对
if (0 == i) ...
谢谢
【问题讨论】:
一个很容易阅读..另一个没有.. 没有,第二种风格叫做“尤达条件式”。 比较就是这么简单的比较。 所以据我了解,2nd
风格的唯一目标是defensive programming
。
【参考方案1】:
完全没有区别。
我一直觉得后一个例子的可读性较差,而且我很少看到它,但有些人似乎喜欢它。
【讨论】:
【参考方案2】:没有区别,选择一个并坚持下去以保持一致性。 (value == variable)
是旧语言的遗留物,您可能会不小心将值分配给 if (a = 0)
中的变量,而不是 (a == 0)
它们都将变成(有效)相同的机器指令,因此根本不会有任何性能差异
【讨论】:
在Java的if语句中不能赋值? @OmnipotentEntity 这个问题也被标记为'c' 原来如此!在那种情况下,这个答案是错误的,特别是这部分:is a relic from older languages where you could accidentally assign a value to a variable in an if (a = 0), instead of (a == 0)
@OmnipotentEntity 你是对的,但是在 C 和 C++ 中它是可能的,所以这里使用了这个约定。即使不需要,该约定也迁移到其他语言。无论如何,大多数现代编译器现在都会给你一个警告,但这绝对是代码风格问题,而不是性能问题。
这是一个合法的问题,因为我的印象是可以在 Java 中的 if 语句中进行赋值。我发现在 Java 中不可能做到这一点的暗示令人惊讶,但我并不完全确定,所以我先问了。 :)【参考方案3】:
效率上没有区别,但是为了可读性更喜欢这种风格:
if (i == 0) ...
另一个版本if (0 == i) ...
是Yoda condition 的一个示例,它被认为是一种糟糕的编程习惯。引用链接:
“Yoda 条件”— 使用 if (constant == variable) 而不是 if (variable == constant),例如 if (4 == foo)。因为这就像说“如果天空是蓝色的”或“如果男人是高大的”。
【讨论】:
仅供参考,您的链接是已删除的帖子,对 10k 代表以下的用户不可见以上是关于效率 ?这些代码之间有啥区别吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
[,] 2d 数组和 [][] 数组之间有啥功能区别吗? [复制]
使用 Spring Security 时,oauth 范围和角色之间有啥区别吗? [复制]