2

基準があり、その基準が真の場合はデルタを追加し、偽の場合は逆(減算)を実行するとします。

bool bBoolean;
int iDelta;
int iQuantity;

そのコードを書くためのより簡潔でエレガントな方法はありますか?つまり、キーワードiQuantityとiDeltaを繰り返さないということです。

if(bBoolean)
  iQuantity -= iDelta;
else 
  iQuantity += iDelta;
4

4 に答える 4

10

私が考えることができる最短のことは次のとおりです。

iQuantity += (bBoolean) ? -iDelta : iDelta;

編集:これは一般に3項ステートメントと呼ばれますが、適切な名前(標準では「条件付き式」または「条件付き演算子」と呼ばれます)です。

(正式な名前を教えてくれたRuneに感謝します。)

于 2012-04-27T07:23:07.083 に答える
1

これは三項演算子です。それは、その可能性が。よりも明確でないために、一部の人に憤慨していますif...else。私はそれが好きですが、注意してください。

int sign = criteria ? -1 : 1;
quantity += (delta * sign);
于 2012-04-27T07:32:05.867 に答える
1

iQuantity += (1-2*bBoolean)*iDelta;

一部のプロセッサでは、追加の演算は分岐よりも高速です。

于 2012-04-27T22:31:14.503 に答える
-3

なぜだめですか:

int tmpDelta = iDelta;
if (iBoolean)
{
  tmpDelta = -tmpDelta;
}
iQuantity += tmpDelta;

私にとって、コードを書いたり読んだりするときは、できるだけわかりやすいものを選びます。これは、コードが常に更新さiQuantityれ、trueの場合は更新が逆になることを示していiBooleanます。

編集:変更しないように更新しましたiDelta

于 2012-04-27T07:43:45.893 に答える