1. 序章

Javaのif-elseステートメントでは、式が true の場合に特定のアクションを実行でき、falseの場合に別のアクションを実行できます。 このチュートリアルでは、not演算子を使用してロジックを逆にする方法について学習します。

2. if-else S tatement

簡単なif-elseステートメントから始めましょう。

boolean isValid = true;

if (isValid) {
    System.out.println("Valid");
} else {
    System.out.println("Invalid");
}

プログラムがネガティブなケースのみを処理する必要がある場合はどうなりますか? 上記の例をどのように書き直しますか?

1つのオプションは、ifブロックのコードを削除することです。

boolean isValid = true;

if (isValid) {

} else {
    System.out.println("Invalid");
}

ただし、空の if ブロックは不完全なコードである可能性があり、否定的な条件のみを処理するための長い道のりのようです。 代わりに、論理式がfalseと評価されるかどうかをテストしてみてください。

boolean isValid = true;

if (isValid == false) {
    System.out.println("Invalid");
}

上記のバージョンは比較的読みやすいですが、論理式がより複雑な場合は読みにくいかもしれません。 ただし、Javaには、not演算子の形式で代替手段があります。

boolean isValid = true;

if (!isValid) {
    System.out.println("Invalid");
}

3. not演算子

The いいえ演算子は論理演算子であり、Javaでは次のように表されます。シンボル。 これは、ブール値をオペランドとして取る単項演算子です。 not演算子は、そのオペランドの値を反転(または否定)することによって機能します。

3.1. not演算子をブール値に適用する

ブール値に適用すると、not演算子はtruefalseに、falsetrueに変更します。

例えば:

System.out.println(!true);   // prints false 
System.out.println(!false);  // prints true 
System.out.println(!!false); // prints false

3.2. not演算子をブール式に適用する

not は単項演算子であるため、式の結果を望まない場合は、正しい答えを得るには、その式を括弧で囲む必要があります。 括弧内の式が最初に評価され、次にnot演算子がその結果を反転します。

例えば:

int count = 2;

System.out.println(!(count > 2));  // prints true
System.out.println(!(count <= 2)); // prints false
boolean x = true;
boolean y = false;

System.out.println(!(x && y));  // prints true
System.out.println(!(x || y));  // prints false

式を否定すると、ドモルガンの法則が作用することに注意してください。 つまり、式の各項が無効になり、演算子が逆になります。 これは、読みにくい式を単純化するのに役立ちます。

例えば:

!(x && y) is same as !x || !y
!(x || y) is same as !x && !y
!(a < 3 && b == 10) is same as a >= 3 || b != 10

4. いくつかの一般的な落とし穴

not 演算子を使用すると、コードの可読性が損なわれる場合があります。 ネガティブはポジティブよりも理解しにくい場合があります。 いくつかの例を見てみましょう。

4.1. ダブルネガティブ

not 演算子は否定演算子であるため、負の名前を持つ変数または関数で使用すると、コードが読みにくくなる可能性があります。 これは、二重否定が理解しにくいと見なされることが多い自然言語に似ています。

例えば:

if (product.isActive()) {...}

よりよく読む

if (!product.isNotActive()) {...}

APIはisActiveメソッドを提供しない場合がありますが、読みやすくするために作成できます。

4.2. 複雑な条件

not 演算子は、すでに複雑な式を読みにくく、理解しにくくする場合があります。 この場合、条件を逆にするか、メソッドを抽出することで、コードを簡略化できます。 not 演算子によって複雑にされた条件のいくつかの例と、条件を逆にすることによってそれらを単純化する方法を見てみましょう。

if (!true) // Complex
if (false) // Simplified

if (!myDate.onOrAfter(anotherDate)) // Complex 
if (myDate.before(anotherDate))     // Simplified
 
if (!(a >= b)) // Complex
if (a < b)     // Simplified

if (!(count >= 10 || total >= 1000))  // Complex
if (count < 10 && total < 1000)       // Simplified

5. 結論

この記事では、 not 演算子と、ブール値、式、およびif-elseステートメントでの使用方法について説明しました。

また、式を逆に書くことによって引き起こされるいくつかの一般的な落とし穴と、それらを修正する方法についても調べました。

いつものようにソース この記事で使用されている例のコードは、GitHubから入手できます。