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

Taxa sendo cobrado em transferencia da conta corrente

Estou acompanhando o curso e percebi que quando fazia uma transferencia da conta corrente a taxa do saque era aplicado a transferencia também. Segue o código.

export class Conta{
    constructor(saldoInicial, cliente, agencia){
        this._saldo = saldoInicial;
        this._cliente = cliente;
        this._agencia = agencia;
    }
    set cliente(novoValor){
        if(novoValor instanceof Cliente){
            this._cliente = novoValor;
        }
    }

    get cliente(){
        return this._cliente;
    }

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

    }
    depositar(valor){
        if(valor <= 0)
        {
            return;
        } 
        this._saldo += valor;           
    }

    transferir(valor, conta){
       const taxa = 1;
        this._transferir(valor, conta, taxa);
    }
}

Conta corrente

import { Conta } from "./Conta.js";

export class ContaCorrente extends Conta{
    static numeroDeContas = 0;
    // #saldo =0 https://github.com/tc39/proposal-class-fields#private-fields

    constructor(cliente,agencia){
        super(0, cliente, agencia)
        ContaCorrente.numeroDeContas += 1;
    }
    sacar(valor){
       const taxa = 1.1;
       return super._sacar(valor,taxa);
    }

    transferir(valor,conta){
        const taxa = 1;
        //this._transferir(valor,conta,taxa)
        this.sacarTransferencia(valor);
        conta.depositar(valor);
    }

}

Com o código assim toda vez que vai fazer uma transferencia ele utiliza o código de saque e deposito, porem o código de saque tem a taxa aplicada na conta corrente. Para solucionar isso eu acrescentei uma função de saque especifico para transferencia. Teria alguma outra maneira mais simples?

    sacarTransferencia(valor){
        const valorSacado = valor;
        if(this._saldo>= valorSacado){
            this._saldo -=valorSacado;
            return valor;
        }
        return 0;
    }
2 respostas
solução!

Olá, Lucas, tudo bem?

Primeiramente, muito bacana que você percebeu esse problema e foi atrás de sua solução!

E sim, existe uma forma mais simples. Perceba que o código do seu método sacarTransferencia é bastante semelhante ao método _sacar que já existe na classe, com a diferença de que é como se o valor da taxa fosse 1.

Então em vez de criar um método, na função transferir você pode simplesmente chamar o _sacar com uma taxa de 1, assim:

    transferir(valor,conta){
        const taxa = 1;
        this._sacar(valor, taxa);
        conta.depositar(valor);
    }

Além disso, só queremos depositar na nova conta exatamente o retorno do método _sacar (que pode ser 0 caso não haja saldo suficiente). Se usarmos diretamente o parâmetro valor, o valor será depositado mesmo que o saque não tenha sido um sucesso. Vamos guardar o retorno do método em valorSacado:

    transferir(valor,conta){
        const taxa = 1;
        const valorSacado = this._sacar(value, taxa);
        conta.depositar(valorSacado);
    }

Espero ter ajudado! Abraços e bons estudos :)

Realmente dessa maneira ficou bem mais fácil e não precisa ficar repetindo código desnecessariamente. Eu implementei a sua sugestão e quando eu dava um console.log no saldo da conta corrente ele retornava como NaN.

Depois de quebrar a cabeça um pouco eu consegui arrumar. Na variável valorSacado eu mudei o this para super ai voltou a funcionar. :)

    transferir(valor,conta){
        const taxa = 1;
        const valorSacado = super._sacar(valor, taxa);
        conta.depositar(valorSacado);
    }