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:
[quote=rcerullo]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){...
[/quote]
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
[quote=rafaelczy]“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[/quote]
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() ).
[quote=rafaelczy]“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[/quote]
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
[quote=rafaelczy]"
Esse nao deixa duvidas “( a <= b )” por isso me parece bem mais simples e elegante
não acham?
[/quote]
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){
//
}
[quote=asousaj][quote=rafaelczy]"
Esse nao deixa duvidas “( a <= b )” por isso me parece bem mais simples e elegante
não acham?
[/quote]
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){
//
}
[/quote]
if(!preparado){ //aqui vc testa SE (PREPARADO == TRUE) ?
//
}
[quote=entanglement][quote=rafaelczy]“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[/quote]
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.
[/quote]
“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 ?
[quote=rafaelczy]
if(!preparado){ //aqui vc testa SE (PREPARADO == TRUE) ?
//
}
[/quote]
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)
[quote=asousaj][quote=rafaelczy]
if(!preparado){ //aqui vc testa SE (PREPARADO == TRUE) ?
//
}
[/quote]
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)
[/quote]
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?
[quote=rafaelczy]
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?[/quote]
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.