Oi Kevin,
A partir do momento que se usa a negação !chuva, o valor passa a ser true
Note que "valor" na sua frase se refere à expressão !chuva
e não à variável chuva
. Uma coisa é a variável chuva
e outra coisa é uma expressão que usa a variável chuva
pra representar algo. Usar a variável na expressão não muda o valor da variável. Ela continua sendo false
e isso continua significando que não está chovendo.
ou seja, deveria estar relacionado com "está chovendo"
Não, pois o que está sendo avaliada é a expressão !chuva
e não a variável simples chuva
.
Vamos dar um passo pra trás. Veja se você concorda com a seguinte tabela:
Variável | Valor | Significado |
---|
chuva | true | está chovendo |
chuva | false | não está chovendo |
A meu ver, ela é bem alinhada com a percepção humana, certo? Se até aqui tudo bem, vamos pro próximo passo, que é o "if"
A melhor maneira de "ler" if (!chuva)
é "se não chuva", assim mesmo, literalmente. Trocando a variável pelo seu valor, fica: "se não falso". E "não falso" é a mesma coisa que "verdadeiro" (ou true). Então finalmente fica "se verdadeiro", o que faz a execução do código entrar no primeiro bloco e imprimir "não está chovendo".
Note que o valor da variável chuva
não foi alterado, ele continua sendo false
e isso continua significando que não está chovendo. O simples fato de se avaliar a expressão !chuva
não muda a realidade, é apenas uma leitura.
Obviamente poderíamos mudar o código pra remover essa negação sem mudar em nada o resultado nem a semântica:
if (chuva) {
console.log("Está chovendo. Melhor ficar em casa.");
} else {
console.log("Não está chovendo. Pode sair de casa.");
}
Veja se ficou mais claro e nos conte se deu aquele "click" e tudo agora faz sentido, tipo, "aaaahhhh, óbvio.. rs..."