Questo è un po 'soggettivo, ma una buona regola generale è di rimuovere la maggior complessità possibile. Per complessità, intendo il numero di operazioni che è necessario eseguire al fine di ottenere il risultato desiderato.
In questo senso, !a && !b
è peggiore di !(a || b)
perché in un caso stai annullando a e b, quindi esegui l'operatore and
risultante in 3 operazioni, mentre in quest'ultimo caso, stai solo eseguendo 2. Ovviamente questo è vacuo quando parli di due condizioni, ma quando hai a che fare con molti, questo può fare una grande differenza.
Idealmente, la forma delle tue condizioni sarebbe nella forma a || b || c
o a && b && c
, aggiungendo parentesi se necessario. Cerca di evitare forme come !(a && b) || (b && (c || d || !a))
in quanto è molto difficile decifrare il significato senza creare una tabella di verità.
Inoltre, è generalmente una buona idea evitare "non" nelle variabili che contengono le condizioni, anche se aggiunge complessità.
In altre parole, è meglio vedere isWet = raining && !hasUmbrella && !isInside
che avere isNotWet = !raining || hasUmbrella || isInside
, perché è più facile razionalizzare il significato della variabile isWet
rispetto a isNotWet
. Puoi sempre annullare isWet
per ottenere lo stesso valore di isNotWet
.