Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Duvida sobre getters e setter/cosntructor

Código completo

class Cliente {
    _cpf;
    constructor(nome, cpf){
        this.nome = nome;
        this._cpf = cpf;        
    }
    get cpf() {
        return this._cpf;
    }
}

class ContaCorrente {
    _saldo = 0;
    constructor(agencia, cliente) {
        this.agencia = agencia;
        this.cliente = cliente;
    }

    get saldo(){
        return this._saldo;
    }
}

const cliente1 = new Cliente('João', 12385244896);
const conta1 = new ContaCorrente(10001, cliente1)
console.log(conta1);


Então, repliquei esse código, pois não estou entendendo mto bem o que são constructor, getters e setters.

Getters e setters são para protejer uma informação, certo? Já o constructor deve estar presente ao criar uma classe, logo na parte de cima.

se eu crio o código abaixo:

class ContaCorrente {
    _saldo = 0;
    constructor(saldo, agencia, cliente) {
        this._saldo = saldo;
    this.agencia = agencia;
        this.cliente = cliente;
    }

    get saldo(){
        return this._saldo;
    }
}

se eu faço o procedimento abaixo:

const conta1 = new ContaCorrente(10001, cliente1)

ele me retorna:

ContaCorrente {
_saldo: 1001,
agencia: Cliente {_cpf:12385244896, nome: 'João'},
cliente: undefined
}

já eu remover o saldo do contructor como no código abaixo:

class ContaCorrente {
    _saldo = 0;
    constructor(agencia, cliente) {
        this.agencia = agencia;
        this.cliente = cliente;
    }

    get saldo(){
        return this._saldo;
    }
}

Ele retorna:

ContaCorrente {
_saldo: 0,
agencia: 1001,
cliente:  Cliente {_cpf:12385244896, nome: 'João'}
}

Não entendi o motivo de ter que remover o saldo do contructor.

1 resposta
solução!

Olá João Tudo bem ? Quando você executa o código: const conta1 = new ContaCorrente(10001, cliente1) você está utilizando o construtor da classe "ContaCorrente" para criar o objeto "conta1".

Na primeira situação, o construtor da classe ContaCorrente está pedindo 3 parâmetros: saldo, agencia e cliente. Os parâmetros "10001" e "cliente1" que você passa, serão vinculados às propriedades "saldo" e "agencia" e a propriedade "cliente" ficará sem valor definido:

constructor(saldo, agencia, cliente) { this._saldo = saldo; this.agencia = agencia; this.cliente = cliente; }

Na segunda situação, você passsa corretamente os 2 parâmetros "10001" e "cliente1" que o construtor está pedindo, ou seja "agencia" e "cliente".

constructor(agencia, cliente) { this.agencia = agencia; this.cliente = cliente; }

Sempre que você for criar objetos de uma classe deve passar os parêmetros de acordo com o que a classe está pedindo.

O construtor serve para que o desenvolvedor defina a maneira que ele quer que sejam criadas as instâncias (objetos) desta classe.

Os métodos getters e setters, como voce disse, são para proteger o acesso às propriedades da classe. No exemplo, não foi definido o método setter da propriedade "saldo". Dessa forma a única meneira de atribuir um valor a esta propriedade é através do construtor da classe.

Espero ter ajudado ! Abs

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