如何防止重复以 return 结尾的代码块?
How can I prevent repetition of a code block ending in return?
我有一段代码在多个 class 方法中多次使用。我想把它变成一个单独的函数,但是有问题的代码块是一个带有 return 的 if 语句,例如
private void method() {
//..
if (condition) {
//..
return;
}
//..
}
问题是,如果我将其提取到一个单独的函数中,return 仅适用于该函数本身,而不再适用于相关的 class 方法。处理这种情况的最佳方法是什么?
一个好的解决方案是将条件代码提取到一个 returns 和 bool
的新方法中,并在每个方法中处理它。代码可能看起来有点像这样:
private bool CheckCondition()
{
if (!condition) // Please recognize the NOT for this condition.
{
return true;
}
// .. your code from if statement
return false;
}
private void Method()
{
if (!this.CheckCondition())
{
return;
}
// ...
}
为了完整性 - 还有另一种方法,但我不推荐:
private void WithCondition(Action action)
{
if (condition)
{
// ..
return;
}
action();
}
private void Method()
{
void Body()
{
// your old method body code after your condition here
}
this.WithCondition(Body);
}
但这看起来很奇怪。有像工厂方法这样的局部函数的用例,例如对于非阻塞或某些事件处理程序。但是你的情况不是一个常见的用例。
我有一段代码在多个 class 方法中多次使用。我想把它变成一个单独的函数,但是有问题的代码块是一个带有 return 的 if 语句,例如
private void method() {
//..
if (condition) {
//..
return;
}
//..
}
问题是,如果我将其提取到一个单独的函数中,return 仅适用于该函数本身,而不再适用于相关的 class 方法。处理这种情况的最佳方法是什么?
一个好的解决方案是将条件代码提取到一个 returns 和 bool
的新方法中,并在每个方法中处理它。代码可能看起来有点像这样:
private bool CheckCondition()
{
if (!condition) // Please recognize the NOT for this condition.
{
return true;
}
// .. your code from if statement
return false;
}
private void Method()
{
if (!this.CheckCondition())
{
return;
}
// ...
}
为了完整性 - 还有另一种方法,但我不推荐:
private void WithCondition(Action action)
{
if (condition)
{
// ..
return;
}
action();
}
private void Method()
{
void Body()
{
// your old method body code after your condition here
}
this.WithCondition(Body);
}
但这看起来很奇怪。有像工厂方法这样的局部函数的用例,例如对于非阻塞或某些事件处理程序。但是你的情况不是一个常见的用例。