如何在这里不使用GOTO功能

时间:2013-09-18 05:48:33

标签: programming-languages goto

我知道全球对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

我的问题是,您将如何实施此类代码? 它需要易于阅读。如果您稍后决定添加操作或添加状态或条件,则可以放心地执行该操作,以免它破坏先前的逻辑。

1 个答案:

答案 0 :(得分:1)

在每个条件之后,您跳出条件并下到标签,因此只能运行其中一个。

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

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;

自从你回来以后,这实际上是一堆“别的if”或开关。使用“else if”或switch可能会增加清晰度,但为了使变化最少,说明答案的实际重要部分我没有把它变成“else if”。

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