Mat*_*ton 9 c# programming-languages
我今天正在阅读我的一些C#代码并找到了这一行:
if (ProgenyList.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated) return;
Run Code Online (Sandbox Code Playgroud)
请注意,您可以在不滚动的情况下判断它是一个与ItemContainerGenerator.Status一起使用的"if"语句,但是如果"if"子句的计算结果为"true",则无法轻易判断该方法将在该点返回.
实际上我应该将"return"语句单独移动到一行,但是它让我想到了首先允许语句的"then"部分的语言.如果C#允许它,该行可能如下所示:
return if (ProgenyList.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated);
Run Code Online (Sandbox Code Playgroud)
这可能有点"争论",但我想知道人们对这种结构的看法.它可能有助于使像上面这样的行更具可读性,但它也可能是灾难性的.想象一下这段代码:
return 3 if (x > y);
Run Code Online (Sandbox Code Playgroud)
逻辑上我们只能返回x> y,因为没有"其他",但是我的一部分看着它并且认为,"如果x <= y,我们还在返回吗?如果是这样,我们又回来了什么?"
您如何看待"之前的if"结构?它是否以您选择的语言存在?你经常使用它吗?C#会从中受益吗?
Jon*_*eet 14
让我们重新格式化一下,看看:
using System.Windows.Controls.Primitives;
...
if (ProgenyList.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
{
return;
}
Run Code Online (Sandbox Code Playgroud)
现在看到返回声明有多难?不可否认,在SO中你仍然需要滚动才能看到整个条件,但是在IDE中你不必......部分原因是因为没有尝试将条件和结果放在同一条线上,并且派对到期了该using指令.
现有C#语法的好处是文本顺序反映了执行顺序 - 如果您想知道将要发生什么,您可以从上到下阅读代码.
就个人而言,我不是"如果......返回"的粉丝 - 我宁愿重新格式化代码以提高可读性而不是改变顺序.
EMP*_*EMP 10
我不喜欢这种邀请的含糊之处.请考虑以下代码:
doSomething(x)
if (x > y);
doSomethingElse(y);
Run Code Online (Sandbox Code Playgroud)
它在做什么?是的,编译器可以解决这个问题,但对于程序员而言,它看起来会让人感到困惑.
是.它读起来更好.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
Run Code Online (Sandbox Code Playgroud)
要结束,我需要强调你需要"谨慎使用".红宝石成语是用于单行的.它可能被滥用 - 但我想这属于负责任的发展领域 - 不要通过建立限制来保护穷人,从而限制更好的开发者.
| 归档时间: |
|
| 查看次数: |
449 次 |
| 最近记录: |