1
resposta

Evitei muita programação defensiva usando

class DateHelper{

    constructor(){
        throw new Error('Você não pode criar uma instância dessa classe');
    }

    static #textoParaData(texto){
        if(!/\d{4}-\d{2}-\d{2}/.test(texto)) 
            throw new Error('Data deve está no formato aaaa-mm-dd')
        return new Date(...texto.split('-').map((item,indice)=> item - indice % 2 ))
    }

    static #dataParaTexto(data){
        return `${('0' + data.getDate()).slice(-2)}/${('0' + (parseInt(data.getMonth())+1)).slice(-2)}/${data.getFullYear()}`
    } 

    static textoParaData(texto){
        return this.#textoParaData(texto)
    }

    static dataParaTexto(data){
        return this.#dataParaTexto(data)
    }
}

Classe listaNegociacoes

class ListaNegociacoes{
    #listaNegociacoes;

    constructor(){
        this.#listaNegociacoes = [];
    }

    #adiciona(negociacao){
         this.#listaNegociacoes.push(negociacao);
    }

    adiciona(negociacao){
        return this.#adiciona(negociacao);
    }

    get #negociacoes(){
        return this.#listaNegociacoes;
    }
}
class NegociacaoController {
    #inputData;
    #inputQuantidade;
    #inputValor;
    #form;
    #listaNegociacoes

    constructor() {
        let $ = document.querySelector.bind(document);

        this.#form = $('.form');
        this.#inputData = $('#data');
        this.#inputQuantidade = $('#quantidade');
        this.#inputValor = $('#valor');
        this.#listaNegociacoes = new ListaNegociacoes()
    }

    adiciona(evento) {
        evento.preventDefault();

        this.#listaNegociacoes.adiciona(this.#criarNegociacao())

        this.#limpaCampo();
    }

    #criarNegociacao() {
        return new Negociacao(DateHelper.textoParaData(this.#inputData.value), this.#inputQuantidade.value, this.#inputValor.value)
    }

    #limpaCampo() {
        this.#form.reset();
        this.#inputData.focus();
    }

}

sei que é um recurso relativamente novo para o JavaScript só quero saber se seu uso no meu código está correto, e o que pode-se melhorado ? e outra pergunta é viável continua usando "#" nos meus códigos ?

1 resposta

Olá Wesley, tudo bem com você?

Peço desculpas pela demora no retorno.

Meus parabéns pela implementação do código e por compartilhá-lo com a comunidade do fórum Alura.

O uso da cerquilha (#) na definição de atributos e métodos privados foi implementado oficialmente na ECMAScript 2022 (European Computer Manufacturers Association) para indicar os atributos ou métodos de classes que são privados e não podem ser acessados fora da classe. Assim, recomendo que dê preferência para o uso da cerquilha (#) sempre que estiver trabalhando com atributos privados, sendo considerado uma boa prática de programação.

Vale ressaltar que o uso do cerquilha (#) para privar atributos não será suportado em todas as versões dos navegadores. Para acompanhar as versões suportadas, você pode estar acessando o seguinte link: compatibilidade dos atributos privados.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!