Utilizzo dell'operatore Not nelle condizioni If in Java

1. Introduzione

Nelle istruzioni if-else di Java possiamo eseguire una determinata azione quando un'espressione è vera e un'alternativa quando è falsa . In questo tutorial impareremo come invertire la logica usando l' operatore not .

2. L' affermazione if-else

Cominciamo con una semplice istruzione if-else :

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

E se il nostro programma dovesse gestire solo il caso negativo? Come riscriveremo l'esempio precedente?

Un'opzione è rimuovere semplicemente il codice nel blocco if :

boolean isValid = true; if (isValid) { } else { System.out.println("Invalid"); }

Tuttavia, un blocco if vuoto sembra che potrebbe essere un codice incompleto e sembra un modo prolisso di gestire solo la condizione negativa. Potremmo invece provare a testare se la nostra espressione logica restituisce false :

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

La versione precedente è relativamente facile da leggere, anche se potrebbe essere più difficile da fare se l'espressione logica fosse più complessa. Java ha un'alternativa per noi, tuttavia, nella forma dell'operatore not :

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

3. Il non operatore

L' operatore not è un operatore logico, rappresentato in Java dal ! simbolo. È un operatore unario che accetta un valore booleano come operando. L' operatore not funziona invertendo (o negando) il valore del suo operando .

3.1. Applicazione dell'operatore not a un valore booleano

Quando viene applicato a un valore booleano, l' operatore not trasforma vero in falso e falso in vero .

Per esempio:

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

3.2. Applicazione dell'operatore not a un'espressione booleana

Dal momento che non è un operatore unario, quando si desidera non è il risultato di un'espressione, è necessario circondare che l'espressione tra parentesi per ottenere la risposta giusta. L'espressione tra parentesi viene valutata per prima e poi l' operatore not inverte il suo risultato.

Per esempio:

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 

Dobbiamo notare che quando si nega un'espressione, entrano in gioco le leggi di De Morgan. In altre parole, ogni termine nell'espressione viene negato e l'operatore viene invertito. Questo può aiutarci a semplificare le espressioni più difficili da leggere.

Per esempio:

!(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. Alcuni errori comuni

L'uso dell'operatore not a volte può compromettere la leggibilità del nostro codice. I negativi possono essere più difficili da capire dei positivi. Diamo un'occhiata ad alcuni esempi.

4.1. Doppi negativi

Poiché l' operatore not è un operatore di negazione, utilizzarlo con variabili o funzioni che hanno un nome negativo può risultare in codice difficile da leggere. Questo è simile ai linguaggi naturali, dove i doppi negativi sono spesso considerati difficili da capire.

Per esempio:

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

legge meglio di

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

Anche se la nostra API potrebbe non fornire un metodo isActive , possiamo crearne uno per facilitare la leggibilità.

4.2. Condizioni complesse

L' operatore not a volte può rendere un'espressione già complessa ancora più difficile da leggere e comprendere. Quando ciò accade, possiamo semplificare il codice invertendo la condizione o estraendo metodi. Vediamo alcuni esempi di condizioni rese complesse dall'operatore not e come possiamo semplificarle invertendo la condizione:

if (!true) // Complex if (false) // Simplified if (!myDate.onOrAfter(anotherDate)) // Complex if (myDate.before(anotherDate)) // Simplified if (!(a >= b)) // Complex if (a = 10 || total >= 1000)) // Complex if (count < 10 && total < 1000) // Simplified

5. conclusione

In questo articolo, abbiamo discusso l' operatore not e come può essere utilizzato con valori booleani, espressioni e nelle istruzioni if-else .

Abbiamo anche esaminato alcune insidie ​​comuni, causate dalla scrittura di espressioni al contrario e come risolverle.

Come sempre il codice sorgente per gli esempi utilizzati in questo articolo è disponibile su GitHub.