好吧,这可能是一些黑客攻击,但请忍受我:)背景是我厌倦了一些方法,那些if语句会弄乱整个方法,例如:
public SomeClass DoStuff(string inputStr)
{
SomeClass result =null;
if (IsOpenFilter(inputStr))
{
....
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
所以我在想,如果我可以做这样的事情,那不是很好吗:
public SomeClass DoStuff(string inputStr)
{
Require(IsOpenFilter(inputStr),null);
....
return result;
}
Run Code Online (Sandbox Code Playgroud)
这种情况可能会被某种形式的代码合同所涵盖,如果是这样,请纠正我:)
我们的想法是,如果语句的计算结果为true,则返回null.如果该方法没有返回类型,则只需:Require(IsOpenFilter(inputStr));
所以我想有两个问题,这可以以某种方式完成吗?我对如何通过调用方法进行条件返回感到困惑.
另一个问题是,这是一个好主意吗?monkeypatch这样的语言有点奇怪,但我更喜欢代码读取的方式.如果它可以放在方法上面的属性中,我会更干净:[Require(IsOpenFilter(inputStr))]
我同意安德斯:反转条件并尽早返回.当您需要在该返回点明确地执行大量资源清理时,"单一返回点"曾经很有价值; 有了finally块,using语句和垃圾收集,它甚至都不是一个有用的指南,IMO.每当你发现自己只是为了获得一个返回点时,就要考虑它是否真正使代码更具可读性.
我几乎总是发现,如果在代码中的某个时刻我知道返回值并且我不想在方法中采取其他操作,那么最好是立即返回.强迫读者浏览方法的其余部分,以防万一其他动作既不优雅也不实用,IMO.
我认为一个方法无法表明它应该导致调用者返回是一件好事- 这种能力听起来像是一个可读性的噩梦.话虽如此,我也认为是一个新的排序条件return语句:
return? expression;
Run Code Online (Sandbox Code Playgroud)
这将返回expression如果它是非null 的评估值; 您可以将它用于非可空类型,如下所示:
int Foo()
{
return? Bar(); // Where Bar() has a return type of int?
...
}
Run Code Online (Sandbox Code Playgroud)
基本上它将是null语句等效的return语句.
这对你的情况没有帮助,请注意 - 你想早点返回null ...
| 归档时间: |
|
| 查看次数: |
2843 次 |
| 最近记录: |