1
resposta

Diferenças no código

Meu código funciona perfeitamente, porém o instrutor adiciona um if a mais. Seguem os dois para comparação.

Meu código:

 valida(state){
        let validacao = this.valido();

        this.validacoes.forEach(regra => {

            const campoValor = state[regra.campo.toString()];
            const args = regra.args || [];
            const metodoValidacao = typeof regra.metodo === 'string' ?
            validador[regra.metodo] : regra.metodo;

            if(metodoValidacao(campoValor,...args, state) != regra.validoQuando){
                validacao[regra.campo] = {
                    isInvalid:true,
                    message: regra.mensagem
                }

                validacao.isValid = false;
            };
        });

        return validacao;

    }

Código do instrutor:

valida(state) {

        //itera pelo array de regras de validação e constrói
        //um objeto validacao e retorna-o

        //começa assumindo que está tudo válido, recebe o 
     //objeto do método valido.
        let validacao = this.valido();

        this.validacoes.forEach(regra => {

            //Se o campo não tiver sido marcado 
            //anteriormente como invalido por uma regra.
            if (!validacao[regra.campo].isInvalid) {
                //Determina o valor do campo, o método a ser invocado
                //e os argumentos opcionais pela definição da regra
                const campoValor = state[regra.campo.toString()];
                const args = regra.args || [];
                //if ternário para estar preparado caso 
                //alguém passe o método direto sem ser string
                const metodoValidacao = typeof regra.metodo === 'string' ?
                    validador[regra.metodo] : regra.metodo;

                //invoca o método específico da regra
                if (metodoValidacao(campoValor, ...args, state) !== regra.validoQuando) {

                    //modifica o objeto no campo específico
                    validacao[regra.campo] = { 
                        isInvalid: true, 
                        message: regra.mensagem 
                    };
                    validacao.isValid = false;

                }
            }


        });
        return validacao;
    }
1 resposta

Boa tarde, Rodrigo! Como vai?

A diferença é que o código do instrutor faz o primeiro if para verificar se o campo não foi marcado como inválido. De modo que só executa as instruções dentro do if caso essa condição tenha sido atendida. Já o seu código executa toda a lógica para todos os campos. Portanto, o código do instrutor é mais eficiente dado que apenas manipula os campos necessários e não todos eles.

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!