条件での割り当て

最近、私のプロジェクトのコードレビュー中に、同僚と意見の相違がありました。 彼らは次のコードに関係していました:



if (false == ($var = foo())){...}







数人の本当に優秀な開発者は、このコードを完全に受け入れられないものとみなしました。 私の同僚のティモフィーの議論は特に示唆的でした:「条件の割り当ては悪です。彼らはプログラミングについての最初の講義でこれについて話します。」 可能ですが、プログラミングに関する講義が1つもなかったので、なぜこれが悪なのかを理解することを提案します。



したがって、PHPの条件演算子と比較演算子がどのように機能するかはご存じでしょう。

以下の例では、$ var変数の値がブール値にキャストされ、trueの場合、条件が満たされています。

if ($var){...}







この例では、変数$ varの値と実行foo()の結果を比較し、それらが同等であれば条件が満たされます。

if ($var == foo()){...}







ここで、条件では、変数$ varにfoo()の実行結果が割り当てられ、その後$ varの値がブール値に変換され、trueの場合、条件が満たされます。

if ($var = foo()){...}







最後の例はphpで有効ですが、条件に比較演算子がないため、実際には読みにくいです。 多くの場合、このコードはエラーを示し、プログラマーは実際には

if ($var == foo()){...}







型を考慮して、変数とブール値を比較する場合、多くの場合、

if (true === $var){...}







これは、変数$ varを誤ってtrueに割り当てないようにするためです。たとえば、

if ($var = true){...}







IDEは、開発者が条件で割り当てを使用する場合、開発者に警告しようとします。 これがEclipseの例です





不一致の原因となったコードに戻る

if (false == ($var = foo())){...}







ここでは、変数$ varにfoo()の結果が割り当てられ、falseと比較されます。 この例とEclipseで書いた例の違いは、ここでは条件の主要な要素が明示的に存在比較であるということです。 このコードはよく読まれており、タイプミスの余地はありません。 Eclipseはそれを有効とみなします





条件で定義された変数がif構造内でのみ使用される場合、このようなコードを使用すると便利です。 その他の場合はすべて、条件から変数の初期化を行うことをお勧めします。



All Articles