1

这是伪代码:

if A
  then B
  if C
    then D
  else
    then E
else 
  then E

B、D、E 包括几行。我们可以看到这里的“else”重复了两次。如何去除重复代码并维护功能?不要使用“goto”。

4

5 回答 5

1

只是让它们成为一个功能。IE

void E() {

... Your several lines of code here

}
于 2013-09-05T03:10:08.447 回答
1
if A
  then B
  if C
    then D
if not (A and C)
  then E

或者

if A
  then B
if (A and C)
  then D
else
  then E
于 2013-09-05T03:14:02.593 回答
1

正如 Ed Heal 所建议的,只需创建一个函数。

有时这并不实用,因为需要传递大量变量,而且您实际上只需要从两个地方调用它。

在这种情况下,您设置了一个标志:

needE = 1

if A {
  B
  if C {
    D
    needE = 0
  }
}

if needE {
  E
}

这可能比稍后重复逻辑的其他解决方案更可取,因为有时您的逻辑会产生副作用。您当然可以计算一次逻辑并存储结果,但这意味着更多的变量。

于 2013-09-05T03:14:22.907 回答
1

使用布尔逻辑,这是一种方法:

if A
  then B
if A and C
  then D
if !A or !C
  then E
于 2013-09-05T03:15:39.967 回答
0

那么“隐藏的 goto”呢?这样,您至少可以获得最少的必要布尔评估:

do
{
  if (A)
  {
    B;

    if (C)
    {
      D;

      break;
    }
  }

  E;
} while (0);
于 2013-09-05T06:49:04.583 回答