1

私は最近 Code Complete で、数値を含む式を処理する推奨される方法は、数直線のように並べることであると読みました。

この本には2つの例があります:

if ( (MIN_ELEMENTS <= i) && (i <= MAX_ELEMENTS) )

if ( (i < MIN_ELEMENTS) || (MAX_ELEMENTS < i ) )

最初の例は i が最小要素と最大要素の間にあることを示し、2 番目の例は i が要素間の範囲外にあることを示しています。

私はそれを採用しようとしてきましたが、それが私の考えなのかどうかはわかりませんが、コードがより明確になるとは思いません.

例:

 if (m_Health > BOSS_HALF_HEALTH) // The way it was

 if (BOSS_HALF_HEALTH <= m_Health) // The "number line" method

それは私だけですか、それとも数直線法はあまり明確ではないようですか? この慣行についてどう思いますか。

彼が比較の左側に定数を置くことは数直線法と矛盾すると述べているのも奇妙ですが、ここでは数直線法が定数を左辺に置くことにつながるようです。

4

5 に答える 5

1

読んでいて思った通りに書けばいいと思います。

したがって、私は次のようにします:

if (i > MIN_ELEMENTS &&
    i <= MAX_ELEMENTS)

それ以外の:

if ( (MIN_ELEMENTS <= i) && (i <= MAX_ELEMENTS) )

私はCを英語と同じように読むので、

i が min 未満で max より大きい場合

それ以外の

min が is より小さく、 is が max より小さい場合

min ではなく i を気にするからです。

于 2009-11-18T01:43:06.467 に答える
1

元々の動機は、同じ論理式で複数の比較を行うことから来ていると思います。引用された例はどちらも、範囲の下限と上限の両方を比較しています。この順序付け方法は、そのような状況で価値がある場合があります。

ただし、. _ m_Health > BOSS_HALF_HEALTHその場合、あなたが行っている比較は、何か (変数) が他の何かよりも大きいかどうかです。これは完全に論理的であり、特定の順序で並べる必要はありません。

常に「数直線」の方法で比較を順序付けた場合、 >or>=比較演算子さえ必要ありません。それらは正当な理由で存在します。

于 2009-11-18T01:48:35.347 に答える
0

Steve McConnell の仕事はすばらしいが、彼に同意できない点はほとんどない. これはあなたとのそれらの1つかもしれません。

コードがわかりにくくなっていると感じた場合は、Steve McConnell がそうするしかないと考えているからといって、そうしないでください。

于 2009-11-18T01:49:11.167 に答える
0

もともとの意図は、習慣化することだと思います。

言語は、よく知られた言葉の配列にすぎません。一度習慣になれば慣れます。

脳を訓練して読むことができれば:

if ( CONST == i )   //[1]

以下と同じ方法で:

if ( i == CONST)    //[2]

次のバグの餌食になることはありません。

if ( i = CONST)     //[3]

ただし、今日の最新のコンパイラのほとんどは、構造に対して警告を発することに注意する必要があります [3]。

結論として、コンパイラの警告をすべて修正する場合は、どちらのコーディング スタイルも使用できます。

于 2010-08-07T12:34:41.307 に答える
0

これは本質的に優れた方法ではないと思います。利点は、コード全体で同じ方法で式を使用することであり、慣れるとコードが読みやすくなります。

于 2009-11-18T01:41:59.557 に答える