Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida a respeito do return sem else

Eu possuo os dois métodos abaixo, o segundo não tem "else" e já retorna false. Sei que se cair na condição, ele irá retornar. Mas as dúvisas são:

Eu poderia fazer o mesmo com o método "saca" ? Isso poderia influenciar em algo negativo/positivo?

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

    public boolean transfere(double valor, Conta destino) {
        if(this.saldo >= valor) {
            this.saldo -= valor;
            destino.deposita(valor);
            return true;
        }
        return false;
    }
2 respostas

Oi Alex!

Dá pra fazer o mesmo com o método saca() sim. É mais questão de estilo de código mesmo, não tem nenhuma influência negativa/positiva na prática.

Quando você tem uma instrução return ele para a execução do método e retorna o valor. Então se ele entra no if, já retorna e nunca executa o segundo retorno. Mas se ele não entra no if, executa apenas o segundo return.

Portanto pra esses casos o else se torna desnecessário.

Espero ter ajudado. Abraço!

solução!

Neste caso, como há apenas duas situações possíveis, às quais são mutuamente excludentes, não faz diferença, qual escolher é questão de gosto. Particularme, prefiro a segunda por ser mais concisa.

Agora, ambas as funções possuem uma lógica interna muito parecida, eu faria o seguinte para reaproveitamento de código:

  private boolean template(double valor, Runnable r) {
    // Poderia ser necessário fazer alguma lógica de locking para evitar
    // condições de corrida, assim o código fica em um lugar só.
    if (this.saldo >= valor) {
      this.saldo -= valor;
      r.run();
      return true;
    }
    return false;
  }

  public boolean saca(double valor) {
    return template(valor, () -> {});
  }

  public boolean transfere(double valor, Conta destino) {
    return template(valor, () -> destino.deposita(valor));
  }