1

鉴于以下成语:

1)

variable = value1
if condition
  variable = value2

2)

variable = value2
if not condition
  variable = value1

3)

if condition
  variable = value2
else
  variable = value1

4)

if not condition
  variable = value1
else
  variable = value2

你更喜欢哪个?为什么?

我们假设最常见的执行路径condition是错误的。

我倾向于学习使用 1),尽管我不确定为什么我更喜欢它。

注意:以下示例可能更简单——因此可能更具可读性——但并非所有语言都提供这种语法,并且它们不适合将变量赋值扩展为将来包含多个语句。

variable = condition ? value2 : value1
...
variable = value2 if condition else value1
4

12 回答 12

10

理论上,我更喜欢#3,因为它避免了两次为变量赋值。在现实世界中,尽管我使用上述四种中的任何一种,它们都会更具可读性或更清楚地表达我的意图。

于 2008-09-30T09:49:19.220 回答
4

我更喜欢方法 3,因为它更简洁和逻辑单元。它只设置一次值,它可以作为一个块移动,而且不容易出错(尤其是在方法 1 中,如果设置为值 1 和检查和可选地设置为值 2由其他语句分隔)

于 2008-09-30T09:54:45.977 回答
3

3)是你想要发生的事情的最清晰的表达。我认为所有其他人都需要一些额外的思考来确定哪个值最终会出现在变量中。

在实践中,如果我使用支持它的语言,我会使用三元运算符 (?:)。我更喜欢尽可能以函数式或声明式风格编写,而不是命令式。

于 2008-09-30T11:15:30.120 回答
1

我自己经常使用#1。if condition阅读起来比 更容易if !condition,尤其是如果您非常想念“!”,至少在我看来。

我所做的大多数编码都是用 C# 编写的,但我仍然倾向于避开三元运算符,除非我正在使用(大部分)局部变量。如果您在某个结构中调用三层,那么在三元运算符中,行往往会很快变长,这会很快再次降低可读性。

于 2008-09-30T09:54:30.580 回答
1

注意:以下示例可能更简单——因此可能更具可读性——但并非所有语言都提供这样的语法

这不是在提供这种语法的语言中不使用它们的论据。顺便说一句,这包括我上次统计后的所有当前主流语言。

并且它们不适合将变量赋值扩展为将来包含多个语句。

这是真的。但是,通常可以肯定的是,这种扩展绝对不会发生,因为它condition总是会产生两种可能的情况之一。

在这种情况下,我总是更喜欢表达式变体而不是语句变体,因为它减少了语法混乱并提高了表达能力。在其他情况下,我倾向于使用switch前面提到的语句——如果语言允许这种用法。如果没有,请回退到 generic if

于 2008-09-30T11:11:07.667 回答
0

switch声明也有效。如果它很简单并且超过 2 或 3 个选项,那就是我使用的。

于 2008-09-30T09:49:38.110 回答
0

在这种情况可能不会发生的情况下。我会选择 1 或 2。否则它只是基于我想要代码执行的操作。(即。我同意克鲁泽)

于 2008-09-30T09:59:58.927 回答
0

如果不是...返回,我倾向于使用。

但那是如果你想返回一个变量。首先排除不合格项往往会使其更具可读性。这实际上取决于语句的上下文以及语言。case 语句在大多数情况下可能工作得更好并且可读,但是在 VB 下性能会受到影响,因此一系列 if/else 语句在特定情况下更有意义。

于 2008-09-30T10:02:13.650 回答
0

对我来说方法1或方法3。方法 1 可以避免额外的范围进入/退出,但方法 3 避免了额外的分配。我倾向于避免使用方法 2,因为我试图使条件逻辑尽可能简单(在这种情况下, ! 是无关紧要的,因为它可以在没有它的情况下被重写为方法 1),同样的原因也适用于方法 4。

于 2008-09-30T10:04:26.343 回答
0

这取决于我正在测试的条件。

如果这是一个错误标志条件,那么我将使用 1) 设置错误标志来捕获错误,然后如果条件成功则清除错误标志。这样就没有机会错过错误条件。

对于我会使用的其他一切 3)

NOT 逻辑只会在阅读代码时增加混乱 - 在我的脑海中,不能代表其他人 :-)

于 2008-09-30T10:55:32.210 回答
0

如果变量有一个自然的默认值,我会选择#1。如果任何一个值都同样(不)适合默认值,那么我会选择#2。

于 2008-09-30T11:01:52.447 回答
0

这取决于。我喜欢三元运算符,但有时使用“if”语句会更清楚。您选择的四种替代方案中的哪一种取决于上下文,但我倾向于选择使代码功能更清晰的那种,并且因情况而异。

于 2008-09-30T11:19:13.230 回答