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

Duvida sobre boas práticas e static methods

Olá pessoal, tudo bom?

Resolvendo a tarefa 12 da aula 4 fiquei com uma pequena dúvida se é interessante a utilização métodos de apoio dentro da própria classe helper e qual seria a melhor forma de acessá-los.

class ArquivoHelper {

    static cria(informacao) {
        if (ArquivoHelper._valida(informacao)) throw new Error('Formato de dados inválido.');
        return new Arquivo(...ArquivoHelper._formata(informacao));

    }

    static _valida(dados) {
        return !/\w+\/\d+\w{2}\/\w+/.test(dados.value);
    }

    static _formata(dados) {
        return dados.value.toUpperCase().split('/');
    }
}

No caso do código que escrevi, para fazer a validação do input tive que chamar ArquivoHelper._valida(informacao), uma vez que como essa classe não tem constructor não foi possível fazer essa chamada com this. É uma má prática usar esse tipo de solução? Se sim, qual seria uma saída mais interessante?

6 respostas

Olhando de novo outros pontos da aula cheguei na solução de chamar um erro caso o metódo seja instanciado. Com isso o novo código ficou assim:

class ArquivoHelper {

    constructor() {
        throw new Error('ArquivoHelper não pode ser instanciada.');
    }

    static cria(informacao) {
        if (this._valida(informacao)) throw new Error('Formato de dados inválido.');
        return new Arquivo(...this._formata(informacao));

    }

    static _valida(dados) {
        return !/\w+\/\d+\w{2}\/\w+/.test(dados.value);
    }

    static _formata(dados) {
        return dados.value.toUpperCase().split('/');
    }
}

Essa seria a melhor solução, neste caso?

Oi Bruno, não vejo problemas em fazer assim, mas eu removeria os underlines, isso por que o underline é uma convenção pra dizer que o método é privado. Entende?

Oi Wanderson,

Entendi mais ou memos. Usei o underline pois a ideia era "dizer" que esses dois métodos são para ser chamados apenas internamente à classe ArquivoHelper, em cria. O uso do underline nesse caso é incorreto?

Obrigado pela ajuda.

solução!

Entendi, mas tipo, se você define como static, quer dizer que não preciso criar uma instância do ArquivoHelper. E até onde sei, você não precisa do this pra chamar método estático, é só referenciar a classe direto.

Entende?

Entendi. Então no final das contas a primeira versão do código era mais interessante.

Obrigado pela ajuda, Wanderson.

Isso, apesar da segunda também funcionar.

Bons estudos Bruno! Abraço.