3
respostas

Aula Privado e Protegido

Olá! Eu realmente não consegui entender o objetivo de criar um método _saque (teria sido para mostrar a possibilidade de fazer métodos privados?)... Eu havia resolvido esse sistema do saque usando o super, sem usar o _saque, e não houve diferença entre o resultado. Existe algo por trás que não estou conseguindo enxergar?

Segue o modo que resolvi (criei estes consoles.log para cada operação para que o terminal exibisse como se fosse um comprovante da transação para eu acompanhar):

Código na classe Conta:

sacar(valor,taxa){
        const valorSacado = valor*taxa;
        if(valor==0){
            console.log(`\nSAQUE\n***Saque não efetuado - valor inválido***\n`)
            return
        }
        if(this._saldo < valorSacado){
            console.log(`\nSAQUE\nAgência: ${this.agencia}\nConta: ${this.conta}\nValor sacado: ${valor}\n***Saldo insuficiente para o saque***\nSaldo atual: ${this._saldo}\n`);
            return;
        }else{
            this._saldo -= valorSacado;
            console.log(`\nSAQUE\nAgência: ${this.agencia}\nConta: ${this.conta}\nValor sacado: ${valor}\n***Saque efetuado com sucesso***\nSaldo atual: ${this._saldo}\n`);    
        }
    }

Código na classe ContaCorrente:

sacar(valor){
        let taxa = 2;
        super.sacar(valor,taxa);
    }

Eu não sei se, por trás de tudo, existe algum problema em resolver assim. E gostaria de saber o benefício de trabalhar com o _saque.

Obrigado!!

3 respostas

Fala ai João, tudo bem? A função _saque é criada para sobreescrever a função saque da classe mãe, isso porque alguma regra do cálculo ou validação para sacar deve ser diferente.

O motivo da função começar com _ é uma convensão da comunidade para definir e informar que tal função ou variavel são privadas e sendo assim só deveriam ser utilizadas pela própria classe.

Essa convensão foi necessária porque na época o JavaScript não tinha suporte nativo para variaveis e funções privadas, porém, hoje esse suporte já existe através do # mas ainda está com pouco suporte sendo necessário adicionar um Babel para transpilar o código.

Espero ter ajudado.

Estou com a mesma dúvida do João, não entendi qual seria a necessidade de usar na classe Conta, dois métodos sacar (um privado (_) e um publico)

Entendo que teriam taxas diferentes, mas na solução aplicada pelo João já não resolveria esse problema, sem a necessidade de criar um método privado?

E essa solução que foi a que cheguei, estaria correta?

 sacar(valor, taxa = 1) {
    let taxa = taxa;
    const valorSacado = taxa * valor;
    if (this._saldo >= valorSacado) {
      this._saldo -= valorSacado;
      return valorSacado;
    }
    return 0;
  }

Fala Eduardo, tudo bem? Acho que sim, não vejo problemas no código.

Abraços.