2011-12-27 6 views
1

場合:コボルロジックが良いかeffecientだろう文

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 
+1

私は多くのコボルを知らないが、最初は常にテストとストアを行う。 2番目はテストを行い、** 2店舗**を行う可能性があります。 – cnicutar

答えて

2

一般に、いずれかが問題なく、最適化をコンパイラに任せてください。ソースコードは前にプログラマが作成しているかを理解するために、人間のために書かれているので

しかし、私は言う:

いずれかの条件が発生する可能性がある場合は、このフォームを使用します。

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。コンパイラがあなたがそれを摂取するのに最も邪魔になることを覚えている限り、いずれもうまくいきます。あなたの主な関心事は、あなたのプログラムを読む必要がある次の人間です。

1

進み、このリンクには、私はこれを好むあなた

The IF Statement

+2

これは理論的に質問に答えるかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供することが望ましいでしょう(http://meta.stackexchange.com/q/8259)。 –

+3

また、提供されたリンクが、部分的には、1985年以降の規格に準拠するコンパイラでは間違っていることにも気づくでしょう。それはCOBOLがIF文(および他のもの)の明示的なスコープターミネータを取得したときです。 – cschneid

+2

この回答で提供されるリンクは、COBOLと過去の時代の関係です。 COBOLが非常に評判が悪い時代。今述べたように、これらのコーディングコンストラクトは現在の実践から少なくとも25年遅れています。上記リンクに描かれているコーディングは博物館に属しています! – NealB

3

のに役立ちます:

IF VAR-A = TRUE 
    MOVE VAR-A TO VAR-B 
ELSE 
    MOVE VAR-C TO VAR-B 
END-IF 

一般に、if falseで行動を取るのは難しいので、私は事柄を積極的に述べたいと思っています。そして、私は効率の違いが本当に重要ではないと思います(特にCOBOLを使用している場合)。コンパイラは通常、とにかく正しいことをします。

1

しかし、順番に処理するために、実行/条件/ループ/評価文コンパイラはそれらに注意を必要とし、このための同等のコンパイラのコードを書き、ので、私は、

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.

あなたは何を言うのですか?

1

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回実行される内部ループで実行されている場合を除き、それについて考えることさえしないでください。

関連する問題