Turma to com uma duvida sobre o operador de negação. que me ajuda ai?
if (!(A>B)) {//....ação} // o que essa linha diz exatamente?
valeu
Turma to com uma duvida sobre o operador de negação. que me ajuda ai?
if (!(A>B)) {//....ação} // o que essa linha diz exatamente?
valeu
O operador “!” transforma o resultado de uma expressão booleana de false para true e vice versa.
Supondo que a = 1 e b = 2
if (!(A>B)) { ação111 } else { ação222}
Retorna a ação111
Essa expressão é a mesma coisa que
if (B>A){...
:arrow:
Supondo que a = 1 e b = 2if (!(A>B)) { ação111 } else { ação222}Retorna a ação111
Essa expressão é a mesma coisa que
if (B>A){...
na verdade ! ( a > b ) é equivalente a ( a <= b ).
“na verdade ! ( a > b ) é equivalente a ( a <= b )”
q eu entendi , eu entendi mas q isso ! ( a > b ) parece q invenaram so pra complicar , realmente parece!
Esse nao deixa duvidas “( a <= b )” por isso me parece bem mais simples e elegante
não acham?
agradeço a ajuda de todos pq isso me faltava mesmo
“na verdade ! ( a > b ) é equivalente a ( a <= b )”
q eu entendi , eu entendi mas q isso ! ( a > b ) parece q invenaram so pra complicar , realmente parece!
Esse nao deixa duvidas “( a <= b )” por isso me parece bem mais simples e elegante
não acham?agradeço a ajuda de todos pq isso me faltava mesmo
Pois é, o operador de negação do Java é bastante infeliz, pois ele fica “escondido” no código. Como você mesmo disse, ficar negando expressões inteiras dificulta a legibilidade do código. Por exemplo, ao invés de:
! (a && b)
eu prefiro:
( !a || !b) ,
ou seja, eu procuro aplicar esse operador somente em variáveis ou métodos. E seu tiver acesso à classe do método prefiro escrever um método mais explícito, por exemplo, se eu tiver um coleção, eu prefiro escrever um método isNotEmpty() do que usar ( ! isEmpty() ).
“na verdade ! ( a > b ) é equivalente a ( a <= b )”
q eu entendi , eu entendi mas q isso ! ( a > b ) parece q invenaram so pra complicar , realmente parece!
Esse nao deixa duvidas “( a <= b )” por isso me parece bem mais simples e elegante
não acham?agradeço a ajuda de todos pq isso me faltava mesmo
Não acho coisa nenhuma.
Em vez de achar que o operador de negação foi só uma complicação que inventaram para te encher o saco, aceite que ela existe e procure entender por que é que ela existe.
Se você não tivesse o operador de negação, você teria de sambar muito quando tivesse algumas coisas mais complicadas.
Por exemplo, digamos que você tem algo como:
(a < b) && (c >= d)
Para negar essa expressão (achar o contrário dessa expressão), bastaria usar:
! ((a < b) && (c >= d))
Só que o equivalente da expressão acima (negada) é:
(a >= b) || (c < d)
não (a >= b) && (c < d). Isso não é intuitivo, não? Faça alguns testes.
Explique por que é que eu tive de alterar o operador && para || na hora de negar a expressão.
Como você deve ter percebido, quando mais você aprende, mais você sabe que não sabe nada mesmo 
"
Esse nao deixa duvidas “( a <= b )” por isso me parece bem mais simples e elegante
não acham?
Neste caso sim. Mas olha este abaixo como ficar mais elegante com ‘!’
boolean preparado = false;
// trocentas linhas de código aqui.
//elegante
if(!preparado){
//
}
//menos elegante
if(preparado == false){
//
}
"
Esse nao deixa duvidas “( a <= b )” por isso me parece bem mais simples e elegante
não acham?
Neste caso sim. Mas olha este abaixo como ficar mais elegante com ‘!’
boolean preparado = false; // trocentas linhas de código aqui. //elegante if(!preparado){ // } //menos elegante if(preparado == false){ // }
if(!preparado){ //aqui vc testa SE (PREPARADO == TRUE) ?
//
}
“na verdade ! ( a > b ) é equivalente a ( a <= b )”
q eu entendi , eu entendi mas q isso ! ( a > b ) parece q invenaram so pra complicar , realmente parece!
Esse nao deixa duvidas “( a <= b )” por isso me parece bem mais simples e elegante
não acham?agradeço a ajuda de todos pq isso me faltava mesmo
Não acho coisa nenhuma.
Em vez de achar que o operador de negação foi só uma complicação que inventaram para te encher o saco, aceite que ela existe e procure entender por que é que ela existe.
Se você não tivesse o operador de negação, você teria de sambar muito quando tivesse algumas coisas mais complicadas.
Por exemplo, digamos que você tem algo como:(a < b) && (c >= d)
Para negar essa expressão (achar o contrário dessa expressão), bastaria usar:
! ((a < b) && (c >= d))
Só que o equivalente da expressão acima (negada) é:
(a >= b) || (c < d)
não (a >= b) && (c < d). Isso não é intuitivo, não? Faça alguns testes.
Explique por que é que eu tive de alterar o operador && para || na hora de negar a expressão.
“Explique por que é que eu tive de alterar o operador && para || na hora de negar a expressão.”
pq ao usar um op. de negação tens q alterar para o contrario todas operações e nao apenas aquelas entre operandos q estão entre parênteses.
razoável ?
if(!preparado){ //aqui vc testa SE (PREPARADO == TRUE) ? // }
Não, ‘if(!preparado)’ está testando se preparado == false;
if(preparado) mesma coisa de if(preparado == true)
if(!preparado) mesma coisa de if(preparado == false)
if(!preparado){ //aqui vc testa SE (PREPARADO == TRUE) ? // }Não, ‘
if(!preparado)’ está testando se preparado == false;
if(preparado)mesma coisa deif(preparado == true)
if(!preparado)mesma coisa deif(preparado == false)
ah ta… pq o padrão do booleano é começar valendo TRUE né?! …dai usando ! inverte o teste e pergunta se preparado==FALSE
to certo?
Não, o valor padrao de boolean é false.
!preparado valida se preparando é false, independente do valor q foi declarado.
Cara procura a apostila J-11 da caelum, vai te ajudar bastante.