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

条件から飛び出して、すべての条件の後にラベルに降りるので、これらの 1 つだけを実行できます。

actionA コードの重複を避けて goto を避けるために、条件を移動するだけです。dosthA は、ステータス == A の場合、またはステータスが B でなく (他のブロックが実行されるため)、3 番目の条件が一致する場合に実行されます。私がこれを得た動作を維持するように注意してください:

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」またはスイッチを使用すると、おそらく明確さが向上しますが、変更を最小限に抑えて、回答の実際の重要な部分を示すために、これを「else if」にはしませんでした。

ところで、私は goto の使用は悪い考えだと固く信じています。Edsger W. Dijkstra の影響力のあるGo To ステートメントは有害であると見なされる を読む価値があります。

于 2014-03-29T06:28:42.800 に答える