1
resposta

Método sacar fora da classe mãe sem a utilização do super

Olá percebi que o professor apenas copiou e colou o método sacar da conta para contaCorrente para a mudança no valor da taxa, neste exemplo não seria possível usar o super para chamar o método e apenas mudar o valor da taxa? Qual seria o motivo de copiar o método igualmente para outra classe?

1 resposta

Olá Sung Ju No, tudo bom?

O que você falou faz total sentido =)

No curso ele fez o "copiar e colar" para poder mostrar que as duas classes podem ter métodos semelhantes, é possível sim usar o super (ou um outro método) para minimizar o código copiado (ele inclusive faz isso, só não lembro se era nesse mesmo curso ou no curso seguinte).

Mas dando um pequeno spoiler, podemos pegar o código do método sacar e migrar ele para um outro método (apenas para separa essa regra de negócio, sem precisar copiar ele para as outras classes). E depois podemos deixar esse método sacar com menos código, que pode ser usado nas demais classes. Como no exemplo abaixo:

  // Classe Conta

  sacar(valor) {
    let taxa = 1;
    return this._sacar(valor, taxa)
  }

  _sacar(valor, taxa) {
    const valorSacado = taxa * valor;
    if (this._saldo >= valorSacado) {
      this._saldo -= valorSacado;
      return valorSacado;
    }

    return 0;
  }

Toda a nossa regra está no método _sacar (que só existe na classe Conta). Já o método sacar é quem vai informar a taxa e chamar o _sacar. Nas demais classes podemos fazer assim:

  // classe ContaCorrente

  sacar(valor) {
    let taxa = 1.1;
    return this._sacar(valor, taxa)
  }

Repare que na classe ContaCorrente eu só trouxe o método sacar. Nele eu informo uma outra taxa, e logo em seguida eu uso o método _sacar da minha classe pai (a Conta). Assim eu não replico a regra de negócio inteira =)

Espero ter ajudado, e qualquer duvida é só chamar!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software