これは、誤って == の代わりに = を入力すると、コードがコンパイルに失敗するためです。
真実。一方、最新のC および C++ コンパイラ (これらの言語のいずれかを使用していると思いますか? あなたは言っていません) は、これを行うと警告を発すると思います。
使用しているコンパイラで試しましたか? デフォルトで実行されない場合は、それを誘発するために使用できるフラグがあるかどうかを確認してください。理想的には、単なる警告ではなくエラーにします。
たとえば、Microsoft C コンパイラを使用すると、次のようになります。
cl /Wall Test.c
test.c(3) : warning C4706: assignment within conditional expression
それはかなり明確です、IMO。(確かに、デフォルトの警告設定はそれを見つけません。)
このスタイルに慣れていないので、 7 == x を読むのが難しく、コードの理解が遅くなります。
それはそう。あなたのアプローチはより自然なスタイルであり、これを潜在的な問題として認識しないコンパイラーを実際に扱っていない限り (そしてそのコンパイラーを使用する以外に方法がない場合)、(IMO) を使用する必要があります。
編集: これはすべての言語で問題になるわけではないことに注意してください。すべての C ライクな言語でさえ問題ではありません。
たとえば、Java と C# のif
構造は似ていますが、どちらの条件式もブール値に暗黙的に変換できる必要があります。割り当て部分はコンパイルされますが、最初の例の式の型は になりますint
。これは、どちらの言語でも関連するブール型に暗黙的に変換できないため、コンパイル時のエラーが発生します。それでも問題が発生するまれな状況は次のとおりです。
if (foo == true)
タイプミスした場合:
if (foo = true)
コンパイルして間違ったことをします。MS C# コンパイラはそれについて警告しますが、通常はそのまま使用する方が適切です。
if (foo)
また
if (!foo)
可能であれば。それは次のようなものを残します:
if (x == MethodReturningBool())
対
if (MethodReturningBool() == x)
これはまだかなりまれであり、MS C# コンパイラ (およびおそらく一部の Java コンパイラ) ではまだ警告が表示されます。