鉴于以下习语:
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),虽然我不确定为什么我更喜欢它。
注意:以下示例可能更简单 - 因此可能更具可读性 - 但并非所有语言都提供此类语法,并且它们不适合将变量赋值扩展为包含将来的多个语句。 / em>的
variable = condition ? value2 : value1
...
variable = value2 if condition else value1
答案 0 :(得分:10)
理论上,我更喜欢#3,因为它避免了必须为变量赋值两次。在现实世界中,虽然我使用上述四种中的任何一种,它们更具可读性,或者更清楚地表达我的意图。
答案 1 :(得分:4)
我更喜欢方法3,因为它更简洁,更合乎逻辑。它只设置一次值,它可以作为块移动,并且它不是容易出错的(这种情况发生,特别是在方法1中,如果设置为value1并且检查并且可选地设置为值2)由其他陈述分开)
答案 2 :(得分:3)
3)是您想要发生的事情的最清晰的表达。我认为所有其他人都需要一些额外的思考来确定哪个值最终会在变量中结束。
在实践中,如果我使用支持它的语言,我会使用三元运算符(?:)。我愿意尽我所能在功能性或陈述性风格上写下命令式。
答案 3 :(得分:1)
我倾向于自己使用#1。 if condition
比if !condition
更容易阅读,特别是如果你偶然错过了'!',至少在我的脑海里。
我所做的大多数编码都是在C#中,但我仍然倾向于避开三元运算符,除非我正在使用(主要是)局部变量。如果你在一些结构中调用三层深度,那么线在三元运算符中很快就会变得非常快,这会很快再次降低可读性。
答案 4 :(得分:1)
注意:以下示例可能更简单 - 因此可能更具可读性 - 但并非所有语言都提供此类语法
这不是在提供这种语法的语言中不使用它们的论据。顺便提一下,这包括我上次统计后的所有当前主流语言。
并且它们不适合扩展变量赋值以在将来包含多个语句。
这是事实。但是,通常肯定会发生这样的扩展,因为condition
总会产生两种可能的情况之一。
在这种情况下,我总是更喜欢表达式变体而不是语句变体,因为它减少了句法杂乱并提高了表达能力。在其他情况下,我倾向于使用前面提到的switch
语句 - 如果语言允许这种用法。如果没有,请回退到通用if
。
答案 5 :(得分:0)
switch
声明也有效。如果它很简单,超过2或3个选项,那就是我使用的。
答案 6 :(得分:0)
在可能不会发生这种情况的情况下。我会选择1或2.否则它只是基于我想要的代码。 (即我同意巡洋舰)
答案 7 :(得分:0)
我倾向于使用,如果不是......返回。
但是,如果你想要返回一个变量。首先使取消资格者脱离困境往往会使其更具可读性。它实际上取决于语句的语境和语言。一个case语句可能更好用,并且大部分时间都是可读的,但是在VB下性能受到影响所以在这种特定情况下,一系列if / else语句更有意义。
答案 8 :(得分:0)
方法1或方法3对我来说。方法1可以避免额外的范围入口/出口,但方法3避免额外的分配。我倾向于避免方法2,因为我试图保持条件逻辑尽可能简单(在这种情况下,!是无关的,因为它可以在没有它的情况下重写为方法1),同样的理由适用于方法4。
答案 9 :(得分:0)
这取决于我正在测试的条件。
如果是错误标志条件,那么我将使用1)设置错误标志来捕获错误,然后如果条件成功则清除错误标志。这样就没有错过错误的可能性。
对于我使用的其他一切3)
NOT逻辑只会在阅读代码时增加混乱 - 在我脑海中,不能代表其他人: - )
答案 10 :(得分:0)
如果变量具有自然默认值,我将使用#1。如果任何一个值与默认值相同(适用),那么我将使用#2。
答案 11 :(得分:0)
这取决于。我喜欢三元运算符,但有时候如果使用'if'语句则更清楚。您选择的四种替代方案中的哪一种取决于上下文,但我倾向于选择能够使代码功能更加清晰的方式,并且因情况而异。