我今天正在阅读我的一些C#代码,发现这一行:
if (ProgenyList.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated) return;
注意,您可以在不滚动的情况下告诉ItemContainerGenerator.Status,它是一个" if“语句,但是很难判断"if”子句是否会在此时返回"true“。
实际上,我应该将“返回”语句本身移到一行中,但它让我想到了允许语句的“然后”部分首先出现的语言。如果C#允许的话,行可能如下所示:
return if (ProgenyList.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated);
这可能有点“争论”,但我想知道人们对这种结构有什么看法。它可能有助于使上面的代码更易读,但也可能是灾难性的。想象一下这段代码:
return 3 if (x > y);
从逻辑上讲,我们只能返回x> y,因为没有“其他”,但我的一部分看了看,会想,“如果x <= y,我们还返回吗?如果是,我们还返回什么?”
你对“如果之前”的结构有什么看法?它是否存在于你所选择的语言中?你经常用吗?C#会从中受益吗?
发布于 2010-04-29 21:54:28
让我们重新格式化一下,看看:
using System.Windows.Controls.Primitives;
...
if (ProgenyList.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
{
return;
}
现在看到返回语句有多难呢?诚然,在这样的情况下,您仍然需要滚动以查看整个情况,但是在IDE中,您不必.部分原因是没有尝试将条件和结果放在同一条线上,而party则是由于using
指令。
现有C#语法的好处是文本顺序反映了执行顺序--如果您想知道会发生什么,可以自上而下阅读代码。
就我个人而言,我不喜欢“返回如果.”-我宁愿重新格式化代码的可读性,而不是改变排序。
发布于 2010-04-29 21:45:58
我不喜欢这引起的模棱两可。考虑以下代码:
doSomething(x)
if (x > y);
doSomethingElse(y);
它在做什么?是的,编译器可以解决这个问题,但是对于程序员来说,它看起来会很混乱。
发布于 2010-04-29 21:45:54
是。它读起来更好。Ruby将此作为其语法的一部分--术语为“语句修饰符”
irb(main):001:0> puts "Yay Ruby!" if 2 == 2
Yay Ruby!
=> nil
irb(main):002:0> puts "Yay Ruby!" if 2 == 3
=> nil
最后,我要强调的是,你需要“谨慎地使用这个”。红宝石的成语是把它用在一条线上。它可能被滥用--不过我想这属于负责任的开发领域--不要通过设置限制来保护穷人来限制更好的开发人员。
https://stackoverflow.com/questions/2742518
复制