IF VAR-A = FALSE
MOVE VAR-C TO VAR-B
ELSE
MOVE VAR-A TO VAR-B
END-IF
または
MOVE VAR-A TO VAR-B
IF VAR-A = FALSE
MOVE VAR-C TO VAR-B
END-IF
IF VAR-A = FALSE
MOVE VAR-C TO VAR-B
ELSE
MOVE VAR-A TO VAR-B
END-IF
または
MOVE VAR-A TO VAR-B
IF VAR-A = FALSE
MOVE VAR-C TO VAR-B
END-IF
一般に、いずれかが問題なく、最適化をコンパイラに任せてください。ソースコードは前にプログラマが作成しているかを理解するために、人間のために書かれているので
しかし、私は言う:
いずれかの条件が発生する可能性がある場合は、このフォームを使用します。
IF VAR-A = FALSE
MOVE VAR-C TO VAR-B
ELSE
MOVE VAR-A TO VAR-B
END-IF
しかし中
MOVE VAR-A TO VAR-B
IF VAR-A = FALSE
MOVE VAR-C TO VAR-B
END-IF
:IF条件は事の非常に珍しい種類であり、それはVAR-A = FALSEは稀で、特別なことであるという事実を強調しているように、制限のないMOVEは、このアプローチを試してみてください、99%の状態である場合
ちょうど私のNSH $ 0.02。コンパイラがあなたがそれを摂取するのに最も邪魔になることを覚えている限り、いずれもうまくいきます。あなたの主な関心事は、あなたのプログラムを読む必要がある次の人間です。
進み、このリンクには、私はこれを好むあなた
これは理論的に質問に答えるかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供することが望ましいでしょう(http://meta.stackexchange.com/q/8259)。 –
また、提供されたリンクが、部分的には、1985年以降の規格に準拠するコンパイラでは間違っていることにも気づくでしょう。それはCOBOLがIF文(および他のもの)の明示的なスコープターミネータを取得したときです。 – cschneid
この回答で提供されるリンクは、COBOLと過去の時代の関係です。 COBOLが非常に評判が悪い時代。今述べたように、これらのコーディングコンストラクトは現在の実践から少なくとも25年遅れています。上記リンクに描かれているコーディングは博物館に属しています! – NealB
のに役立ちます:
IF VAR-A = TRUE
MOVE VAR-A TO VAR-B
ELSE
MOVE VAR-C TO VAR-B
END-IF
一般に、if false
で行動を取るのは難しいので、私は事柄を積極的に述べたいと思っています。そして、私は効率の違いが本当に重要ではないと思います(特にCOBOLを使用している場合)。コンパイラは通常、とにかく正しいことをします。
しかし、順番に処理するために、実行/条件/ループ/評価文コンパイラはそれらに注意を必要とし、このための同等のコンパイラのコードを書き、ので、私は、
MOVE VAR-A TO VAR-B
IF VAR-A = FALSE
MOVE VAR-C TO VAR-B
END-IF
そのコーディングのこの方法を好みます。
For instance, if we have scenarios where FALSE scenario occurs for less than 50% then we can move the value into the variable for TRUE always, which may avoid going into the IF and IF with no ELSE is always less complex.
あなたは何を言うのですか?
VAR-Aがでなければでない限り、最初のほうが効率的です(その場合はドロップしてください)。条件は必ず実行する必要があり、そして1つの割り当てが常に発生しなければならないので、これは最適です:
IF VAR-A = FALSE
MOVE VAR-C TO VAR-B
ELSE
MOVE VAR-A TO VAR-B
END-IF
を個人的に、私は読みやすくするために、最初のTRUE条件を評価することを好みます。
IF VAR-A = TRUE
MOVE VAR-A TO VAR-B
ELSE
MOVE VAR-C TO VAR-B
END-IF
いずれの方法でも1つのブランチであるため、パフォーマンスの違いはありません。複数の値をチェックしていた場合は、最も一般的なものを最初に置きたいと思っています。
EVALUATE TRUE
WHEN VAR-A = TRUE
MOVE VAR-A TO VAR-B
WHEN VAR-C = TRUE
MOVE VAR-C TO VAR-B
WHEN OTHER
this is slower, because it had to do two condition checks to get here
MOVE VAR-C TO VAR-B
END-EVALUTE
しかし、あなたが見ることができるように、それは、単純なIFには適用されません。
IF condition
no effort to get here
assignment cost is constant
one go-to to get to the next line
ELSE
one go-to to get here
assignment cost is constant
no effort to get to the next line
END-IF
しかし、これは本当にすべてNIT-ピッキングです。ここでは、いくつかの手順について説明しています。これが分単位で1,000,000回実行される内部ループで実行されている場合を除き、それについて考えることさえしないでください。
私は多くのコボルを知らないが、最初は常にテストとストアを行う。 2番目はテストを行い、** 2店舗**を行う可能性があります。 – cnicutar