58

これは主観的な質問だと理解しているので、閉じる必要があるかどうかお詫びしますが、ある形式が他の形式よりも一般的に好まれているのではないかと思うほど頻繁に出てくるように感じます。

明らかに、最善の答えは「コードをリファクタリングして、虚偽をテストする必要がないようにする」ことですが、簡単な方法がない場合があり、「else」ブランチは単に処理を続行することです。したがって、「falseでない場合」の構成が必要な場合は、これが推奨される標準です。

not演算子

if (!value)

またはfalseのテスト

if (value == false)
4

19 に答える 19

74

if (!value)従うのがより簡単/より速くなります。あなたが言ったように主観的。あなたが一貫している限り、これが主なことです。

編集

追加するもう1つのポイント-true/falseキーワードを省略すると、(うまくいけば)コーダーはより適切な名前の変数を使用するようになります。ブール変数は、常に次のような意味または状態の目的を示す必要があります。

if (MyWallet.IsEmpty)

== false上記を使用する理由はなく、== true冗長であるためです。上記は人間がすぐに読める形式です。

解読するよりもはるかに優れています:

if (MyWallet.EmptyStatus == true)またはこのようなばかげた何か。

于 2010-06-04T19:58:46.900 に答える
30

私は個人的に好きです

if ((value == false) == true)..。

これは、ステートメントvalue is falseが実際にブール値のtrueに評価されていることを確認しているためです...

そして、明らかに、両方の可能性をカバーすることで、さらに明確になります。

if ((value == false) == true && (value == false) != false)

<grin/>

そして、明快さのために本当の大胆であり、議論の余地のない読みやすさを要求するあなたのそれらのために、私は提案します

if (((value == false) == true && (value == false) != false) == true)

しかし、真剣に、そして私はこれを追加することを考えました。適切で意味のある変数Namesを作成することが、この問題の鍵です。値が宣言されているクラスで、次のように計算変数を簡単に追加できます(たとえば、「value」は実際には「LaunchMissile」です) 。必要なのは、です
public bool AbortLaunch => !LaunchMissile。これで、 簡潔で非常に読みやすく、否定を回避できます。オペレーター。

if (AbortLaunch) ...

于 2010-06-04T20:03:22.290 に答える
22
if (!value)

私の意見では、これは常に明確です。

if (value == false)

ちょっと意味があるように聞こえるので、私はこれを言うのは嫌ですが、これは通常、コードを書いている人がブール値の使用を本当に理解していないことを示しています。ifステートメントのブール値を再検証する必要はありません。冗長です。

(個人的には、もっと意味のあるものではなく変数に名前を付けた場合、その人にもイライラしますvalue。あなたが投稿したのは単なる疑似コードだと思います。レビューで間違いなくそれを言います。)

編集(以下のコメントに応じて):

些細なことのように見えるかもしれませんが、多くの場合、それははるかに大きなものの兆候です。正直なところ、var==trueなどを使用するほとんどの人は理解していません。それはただの事実です。私は彼らが愚かだと言っているのではなく、おそらく彼らがレビューして学ぶ必要がある何かがあるというだけでプログラマーであってはなりません。問題は、ロジックがはるかに複雑になると、このような概念を理解しないと、将来的にはるかに大きな問題が発生する可能性があることです。「それはスタイルだ」と言う人もいます。それはいいです。この場合の本当の質問は、「このようにすることは私にとってどのように有益ですか?私や他の人々はそれから何を得るのですか?」です。その質問にしっかりと答えられない場合は、「なぜこれが良い考えなのか」と自問する必要があります。

于 2010-06-04T19:59:55.993 に答える
13

私は決して使用if(value == true)しないので、一貫性を保つために、も使用しませんif(value != false)

于 2010-06-04T20:03:09.810 に答える
13

if(!value)特にブール変数に正しく名前を付けると、より明確で「エレガント」になります

  • isWhatever
  • hasWhatever

何かのようなもの

if (Page.IsPostback == true)

私には冗長に思えます

于 2010-06-04T20:03:17.903 に答える
11

反対意見(種類)

コンパイルの観点からは、同じILを取得するため、読みやすさの観点からのみ重要になります。

その観点からif(value == false)、カジュアルな読者にはより明白であり、!を見逃す可能性は低くなります。ブール値の前。

正直なところ、私は両方のアプローチを使用し、ほとんどの場合、変数名に依存させます。それでも「バング」の代わりに「しない」と言っても大丈夫だと思われる場合は、バング表記を使用する可能性があります

例えば

if(!gotValue) {}
//if (I've) not gotValue

//but

if(checkValue == false){}
//If (I've) not checkValue doesn't quite work here grammatically.
于 2010-06-04T20:09:07.983 に答える
6

私はVBでコーディングするときに使用しますが、C#でコーディングするときNot valueに使用する傾向があります。value == false変数の名前で感嘆符が失われることがあります(例:!legal)。多分それは私がベテランのベテランだからです。

于 2010-06-04T20:07:09.233 に答える
2

値がブール値であることが確実にわかっている場合は、通常、(!value)も優先します。しかし、多くの場合、それは文字列または数値である可能性があります。

多くの言語の条件文では、数値0はfalseと評価されます(ただし、すべてではありません)。ただし、文字列「0」はtrueと評価されます。これは、特にJavaScriptで、特にサーバーからJSON文字列を受信する場合、特にサーバーがPHPで記述されている場合に問題になります(ほとんどのPHP開発者は、DBから値を取得してjson_encodeを呼び出すだけで、それを知らないためです。 DBは文字列を生成し、ブールフィールドとして使用するすべての0と1がもう一方の端で文字列としてエンコードされるため、条件付きですべてtrueとして扱われるという手がかりがありません。

うそつき。私の提案:特にあなたの言語が「非常に動的な」タイプ(つまり、JavaScript、PHP、Perl)である場合は、明示的にしてください。

于 2010-06-04T21:01:27.607 に答える
2

if(!value)関係する変数の名前によっては、英語のセマンティクスによれば、「真の」ケースの方がはるかに理にかなっているため、使用することをお勧めします。

このMSDN記事の例の1つを検討してください。

if(pane.IsChecked)

英語で「ペインがチェックされている場合」と読みます。

ただし、if(pane.IsChecked == true)は英語で「ペインがチェックされているかどうかがtrueの場合」と読みます。その声明は、英語では本来あるべきよりもはるかに明確ではありません。

C#コードをバイナリで記述しない理由の1つは、人間が読みやすいことです。読んだときにうまく流れるコードとそうでないコードのどちらかを選択できる場合は、読みやすいコードを選択してください。「」を追加する== trueとこの例が読みやすくなるとは思いませんし、MSDNもそうは思いません。

確かに、これは心配すべきかなり小さな例です。しかし、他の回答のいくつかが示しているように、この考え方を大規模なケースに適用しないと、読みやすさが損なわれる可能性があります。

于 2010-06-04T20:31:27.303 に答える
1

申し訳ありませんが、2番目は私にはばかげているように見えます。

誰かがそれを好むなら、私は余分なレベルを追加します:

if( (value==false) == true )

:)

于 2010-06-04T20:10:08.507 に答える
1

あなたが好むものは何でも。1つを選び、それに固執します。

于 2010-06-04T20:00:23.543 に答える
1

それほど主観的ではないと思います。私はそれが長い形で推奨されるのを見たことがありません。実際、私が読んだすべての本とコーディングガイド、および「優れたプログラマーになる方法」は、それを思いとどまらせます。

それはと同じカテゴリに分類されます

if (value) {
  return true;
} else {
  return false;
}

OTOH、ここで与えられたすべての答えは、私の最初のステートメントをちょっと等しくないようにします。

于 2010-06-04T20:28:07.517 に答える
1

私はif (!value)、少なくとも変数や一般的なプロパティなどを評価するためのスタイルを好みますPage.IsPostback。より複雑なものについては、次のように式を括弧で囲む傾向があります。

if (!(SomeType.SomeProperty.CallingAMethod(input).GetSomething.BooleanProperty))

もう少し注意を引くためだけに。

全体として、これはPerlスタイルunlessuntilキーワードの議論です。

于 2010-06-07T02:51:37.567 に答える
0

条件が単一の値のチェックである場合は、!valueより高速です。

ただし、条件に複数の値のチェックが含まれている場合は、はるかに読みやすくなりますvalue == false。どういうわけか、値の複数の否定よりも、等しいかどうかの複数のチェックを解析する方が簡単です。

于 2010-06-04T20:05:20.830 に答える
0

私は実際に可能なフォームの多く。

これは実際にはそれが標準に書かれている方法ではありませんが、これは私がそれを見る方法です:

//if foo is(or exists)
if(foo)

//if foo is true
if(foo == true)

//if foo doesn’t exist
if(!foo)

if foo is false
if(foo == false)

したがって、==falseが冗長であるとは思いません。

于 2010-06-04T20:44:58.567 に答える
0

私は2番目のオプションを好みますif (value == false)。私は喜んでif (~value)またはif (not value)それをサポートする言語で使用しますが、それ!はwaaaaayを変数名または中括弧または|のいずれかと簡単にマージするだけです。または|| 演算子...少なくとも私の意見では。

また、2つのこと:

  1. 私は決してしませんif (value == true)、そして私は私が一貫していないことに気づいています。そして、一貫性は私の意見では非常に重要ですが、その厄介なこと!は単に悪いことです。
  2. 改行の議論のように、それは本当に個人的な好みの問題だと思います。私はそのようなばかげた小さなことでチームメイトを批判することは決してありません、そして私はそうする人々を理解するのに苦労しています。
于 2010-06-07T15:57:46.900 に答える
0

if実行するためにブロックが評価する必要のある条件が何であれ、に評価する必要がありtrueます。

したがって、がの場合、ブロックの実行を許可する理由valueは、演算子が本質的にの値をに反転するためです。したがって、括弧内の結果の条件は、ブロックが実行するために必要な条件に評価されます。falseif (!value)if!falsevaluetruetrueif

if (value)、、、、、は、何を達成するかに応じて、有効なコードですif (!value)。たとえば、がnull許容ブール値の場合、構文エラーが発生し、ブロックが実行される前にnullでないことを確認しなかった場合は例外がスローされるため、非常に便利です。if (flag == value)if (value == true)if (value == false)if (value == true)valueif (value)if (value.Value == true)valueif

于 2018-08-10T21:18:53.187 に答える
0

私はまた、==内部での使用ifは冗長であり、少なくとも視覚的には、スペースを導入することによって別の提案があります。

if ( ! created)

OpenDyslexicをフォントとして使用している場合でも、開き角かっこ!の横のnot記号(が近すぎて、一目で区別できない場合がありますif(!created)

于 2020-04-15T12:13:34.277 に答える
-1

if(value == false)を使用します!(!value)が非常に小さい場合、私は時々それを見逃します。

于 2018-01-26T09:19:02.533 に答える