0

我知道 goto 逻辑的全球怨恨......但它就在这里。情况就是这样,假设你有一个函数接受一个状态并决定你要采取的行动。这是python中的伪代码(作为一个笑话。)

def function(status, condition, value):
    if(status == A) :
        goto actionA
    if(status == B) :
        goto actionB
    if(value > 1 or condition == C):
        goto actionA
    ...more conditions you got the idea.
    return;
  actionA:
     dosthA
     return
  actionB:
     dosthB
     return
  ...more actions

我的问题是,你将如何实现这样的代码?
它需要易于阅读。如果稍后您决定添加操作或添加状态或条件,您可以确信它不会破坏早期的逻辑。

4

1 回答 1

1

您正在跳出条件并在每个条件之后跳到您的标签,因此只有其中一个可以运行。

为了避免重复 actionA 代码并避免 goto,您可以移动您的条件。dosthA 将在 status == A 或状态不是 B 时执行(因为另一个块将运行)并且第三个条件匹配。小心保留我得到的行为:

def function(status, condition, value):
    if(status == A or (status != B && (value > 1 or condition == C))) :
        dosthA
        return
    if(status == B) :
        dosthB
        return
    ...more conditions you got the idea.
    return;

此外,这实际上是一堆“else if”或一个开关,因为您要返回。使用“else if”或 switch 可能会增加清晰度,但为了做出最少的更改来说明答案的实际重要部分,我没有将其变成“else if”。

顺便说一句,我坚信使用 goto 是一个坏主意。值得一读 Edsger W. Dijkstra 有影响力的Go To Statement Considered Harmful

于 2014-03-29T06:28:42.800 回答