まず、いくつかのバックグラウンド:私はトレーニング中のIT教師であり、10年生のクラスにjavaのブール演算子を導入しようとしています。教師と指導者は、準備したワークシートを確認し、単一の&または|を使用できるとコメントしました。「同じことをする」ため、演算子を示します。
&と&&の違いを認識しています。
&は、整数間の使用を目的としたビット単位の演算子で、「ビットトゥイドリング」を実行します。
&&は、ブール値間で使用するための条件演算子です。
これらの演算子が常に「同じことをする」わけではないという点を証明するために、ブール値間でビット単位を使用するとエラーが発生する例を見つけました。この例を見つけました
boolean bitwise;
boolean conditional;
int i=10, j=12;
bitwise = (i<j) | ((i=3) > 5); // value of i after oper: 3
System.out.println(bitwise+ " "+ i);
i=10;
conditional = (i<j) || (i=3) > 5 ; // value of i after oper: 10
System.out.println(conditional+ " "+ i);
i=10;
bitwise = (i>j) & (i=3) > 5; // value of i after oper: 3
System.out.println(bitwise+ " "+ i);
i=10;
conditional = (i>j) && (i=3) > 5; // value of i after oper: 10
System.out.println(conditional+ " "+ i);
この例は、式の後半で値を変更する必要がある場合、ビットワイズは熱心な演算子であり、条件は短絡回路として動作するため、結果の違いにつながることを示しています(2番目を評価しません前半が&&の場合にfalse、||の場合にtrueの場合、半分。
この例には問題があります。比較するのと同時に値を変更したいのはなぜですか?堅牢なコーディング方法とは思えません。私は常に、本番コードで1行で複数の操作を行うことを嫌っていました。彼のコードの保守性に関して良心のない「コーディングカウボーイ」がするように思えます。一部のドメインでは、コードをできるだけコンパクトにする必要があることを知っていますが、これは一般的に悪いプラクティスですか?
&&および||の使用を奨励する私の選択を説明できます。以上&| これはソフトウェアエンジニアリングで受け入れられているコーディング規則であるからです。
しかし、誰かが条件式でビットごとの演算子を使用するより良い、実際の世界の例を教えてもらえますか?