Я думаю, что для одной переменной оператор not достаточно прост, и вопросы именования становятся более актуальными.
Никогда не называйте переменную not_X, если нужно, используйте тезаурус и найдите противоположность. Я видел много ужасного кода вроде
if (not_dead) {
} else {
}
вместо очевидного
if (alive) {
} else {
}
Тогда вы можете разумно использовать (очень читабельно, нет необходимости инвертировать блоки кода)
if (!alive) {
} else {
}
Если мы говорим о большем количестве переменных, я думаю, что лучшим правилом является упрощение условия. Через некоторое время проекты, как правило, получают условия, такие как:
if (dead || (!dead && sleeping)) {
} else {
}
Что переводится как
if (dead || sleeping) {
} else {
}
Всегда обращайте внимание на то, на что похожи условия и как их упростить.