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

Após criar o módulo Conta Corrente, depositar não é reconhecido como função

Após criar o módulo Conta Corrente, depositar não é reconhecido como função

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



    transferir(valor, conta)
    {
       const valorSacado = this.sacar(valor);
        conta.depositar(valorSacado);

$ node ./index.js file:///C:/Users/mellegari.oliveira/Desktop/Projeto/ContaCorrente.js:31 conta.depositar(valorSacado); ^

TypeError: conta.depositar is not a function at ContaCorrente.transferir (file:///C:/Users/mellegari.oliveira/Desktop/Projeto/ContaCorrente.js:31:15) at file:///C:/Users/mellegari.oliveira/Desktop/Projeto/index.js:27:22 ?[90m at ModuleJob.run (internal/modules/esm/module_job.js:138:23)?[39m ?[90m at async Loader.import (internal/modules/esm/loader.js:178:24)?[39m

6 respostas

Olá Ricardo, tudo bem com você?

Você pode postar todos os códigos para que a gente possa encontrar onde pode estar dando erro?

Tanto o arquivo index.js, quanto os das classes, pode ser colando igual você fez na função!

Estou aguardando :)

Abraços e Bons Estudos!

Bom dia Geovani, Obrigado pelo retorno colocarei o código para o index.js e as classes

// importar classe
import {Cliente} from "./Cliente.js"
import {ContaCorrente} from "./ContaCorrente.js"

const cliente1 =  new Cliente()
cliente1.nome = "Ricardo";
cliente1.cpf = 11122233309;

const cliente2 = new Cliente()
cliente2.nome = "Alice";
cliente2.cpf = 88822233309;

const contaCorrenteRicardo = new ContaCorrente()
//saldo inicial
contaCorrenteRicardo._saldo = 0;
contaCorrenteRicardo.agencia = 1001;
contaCorrenteRicardo.cliente = cliente1
contaCorrenteRicardo.depositar(500);
console.log(contaCorrenteRicardo._saldo);
//depósito



const conta2 = new ContaCorrente();
conta2.cliente = cliente2;
conta2.agencia = 102

//contaCorrenteRicardo.transferir(200, cliente2);
console.log(conta2);

//classe Cliente

//declarar cliente dentro de uma classe tem-se propriedades
//exportar classe para o arquivo principal
export class Cliente{
    nome;
    cpf;

//classe ContaCorrente

export class ContaCorrente{
    //atributos públicos
    agencia;
    cliente;
    //atributos privados
    _saldo=0;

    sacar(valor){ if(valor<=this._saldo){
        this._saldo -= valor;}else
            {console.log("Valor não disponível")
        }
    }

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


             //objeto pode ser um parâmetro de
    transferir(valor, conta){
        const valorSacado = this.sacar(valor);
        conta.depositar(valorSacado);
    }

 }

Obrigado!

Opa Ricardo,

O problema está nessa linha que você comentou:

//contaCorrenteRicardo.transferir(200, cliente2);

Correto?

Veja que o nosso método transferir recebe como parâmetros um valor, e uma conta:

transferir(valor, conta){

Entretanto veja que estamos passando apenas um cliente, no caso o cliente2, e por isso está dando o erro :)

Veja que o erro diz que conta.depositar is not a function, e está certinho pois o cliente que estamos passando como parâmetro não tem esse método!

Na verdade deveria ser:

contaCorrenteRicardo.transferir(200, conta2)

Dessa forma o conta2 é um objeto do tipo ContaCorrente que tem o método .depositar()

Compreendeu? Qualquer coisa estou a disposição!

Abraços e Bons Estudos :)

Giovani, obrigado pelo retorno!

Eu comentei pois estava testando outras códigos.

Fiz as aterações que você mencionou no index.js

contaCorrenteRicardo.transferir(200, conta2);
console.log(contaCorrenteRicardo._saldo);
console.log(conta2);

E tenho essa resposta

500
 300
ContaCorrente {
  agencia: 102,
  cliente: Cliente { nome: 'Alice', cpf: 88822233309 },
  _saldo: NaN
}

Não entendo porque o saldo dá como Nan ao invés de 200. o depositar ainda não está funcionando

solução!

Opa, um erro já foi ao menos :)

Agora esse do NaN é mais fácil de resolver, a questão não é no depositar e sim no sacar, veja:

  sacar(valor) {
    if (valor <= this._saldo) {
      this._saldo -= valor;
    } else {
      console.log("Valor não disponível")
    }
  }

Em nenhum momento estamos retornando um valor, então quando fazemos:

  transferir(valor, conta) {
    const valorSacado = this.sacar(valor);
    conta.depositar(valorSacado);
  }

O javascript entende que a função this.sacar() nos trouxe um valor indefinido (undefined), então o que estamos fazendo é:

const valorSacado = this.sacar(valor);

// valorSacado = undefined

conta.depositar( undefined )

E ai temos um ponto interessante que é: Ao tentar somar um valor numérico com undefined temos o NaN (Not a Number)

Para corrigir isso é bem simples:

  sacar(valor) {
    if (valor <= this._saldo) {
      this._saldo -= valor;
    return valor;
    } else {
      console.log("Valor não disponível")
    }
  }

Dessa forma a função sacar está nos devolvendo o valor que foi sacado :)

E com isso no método transferir() teremos que valorSacado é algo numérico e depositar irá funcionar corretamente :)

Testando o seu index.js da maneira que você mandou, temos agora:

500
300
ContaCorrente {
  agencia: 102,
  cliente: Cliente { nome: 'Alice', cpf: 88822233309 },
  _saldo: 200
}

Abraços e Bons Estudos!

Muito obrigado, deu certo!