Dúvida em retorno de método booleano

4 respostas
andrepm

Pessoal, estou fazendo um exercício da apostila da Caelum e me deparei com um exercício que introduz retornos de métodos. Nesse caso, é um método que retorna um valor bollean.

Esse é meu método:

boolean saca(double quantidade) { if (quantidade > this.saldo) { return false; } else { double novoSaldo = this.saldo - quantidade; this.saldo = novoSaldo; return true; } }

E essa é a chamada do método em outra classe:

if (minhaConta.saca(2000)) { System.out.println("Saque realizado com sucesso"); } else { System.out.println("Saldo insuficiene"); }

Por que o correto nesse if é if (minhaConta.saca(2000)) ao invés de if (minhaConta.saca(2000)) = true ?

Pelo que eu entendo, ele vai verificar o retorno do método que pode ser tanto true quanto false (dependendo do valor do argumento) e então executar a estrutura.

4 Respostas

ErickRAR

O que fica dentro do if é uma expressão booleana que gera um true ou false.
o seu método saca retorna true ou false, assim o seu if fica desta maneira:

if (true) {  
       System.out.println("Saque realizado com sucesso");  
    }  
    else {  
        System.out.println("Saldo insuficiene");  
    }

Da maneira como você acha que deveria ficar, você estará fazendo uma comparação desnecessária. Imagine que você passe o resultado do método para uma variavel:

boolean resultado = minhaCaonta.saca(2000);
if (resultado==true)...

Agora imagine que o resultado seja sempre verdadeiro, olha como seu if ficaria esquisito:

if (true==true) {  //se verdadeiro igual a verdadeiro??
       System.out.println("Saque realizado com sucesso");  
    }  
    else {  
        System.out.println("Saldo insuficiene");  
    }
andrepm

Ah compreendi, então nesse caso ele sempre vai estar verificando se é true correto?

Eu achava que eu podia fazer a verificação de que se o método for false primeiro, por isso me confundi.

ErickRAR

Não precisa não. Alguns programadores colocam essa verificação para outros programadores não ficarem perdidos ao lerem. if(resultado==true) fica mais legível, mas dependendo do nome do método ou da variavel, é inutil isso, olha só esse exemplo:

public boolean IsSaldoPositivo(){
return this.saldo >= 0;
}


if (minhaConta.isSaldoPositivo) {  
       System.out.println("Parabéns, você não está devendo");  
    }  
    else {  
        System.out.println("=(");  
    }
andrepm

Saquei! Muito obrigado pela ajuda :wink:

Criado 10 de março de 2014
Ultima resposta 10 de mar. de 2014
Respostas 4
Participantes 2