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

Olhar aguçado para o paradigma da orientação a objetos

Tentei adicionar mais uma 'placa' para ser validada com o código, porém o console só valida as duas primeiras, a que eu adicionei não chega a ser validada. Alguém pode me dizer porque isso acontece?

class Codigo {

    constructor(texto) {

        if(!this._valida(texto)) throw new Error (`O texto ${texto} não é um código válido`);
        this._texto = texto;
    }

    _valida(texto) {

        return /\D{3}-\D{2}-\d{2}/.test(texto);
    }

    get texto() {

        return this._texto;
    }

}

instanciando:

    let codigo1 = new Codigo('GWZ-JJ-12'); // válido
    console.log(codigo1.texto);
    let codigo2 = new Codigo('1X1-JJ-12'); // inválido
    console.log(codigo2.texto);
    let codigo3 = new Codigo('DZA-MR-74'); // código a mais, teste
    console.log(codigo3.texto); 
8 respostas

Fala ai Camila, tudo bem? No exemplo três, a placa informada é válida dado a sua regex: \D{3}-\D{2}-\d{2}, isso porque ela contem o formato correto.

Onde seria: Três letras-duas letras-dois numeros.

Espero ter ajudado.

Sim, Matheus, está válida, mas no console não passa pelo motor de validação, no final ela não consta no console.

Descobri, depois do 'throw' o código não é mais executado, li que posso usar um 'catch', mas não entendi como é feito, se alguém puder me ajudar, continuarei tentando aqui. Obrigada.

Consegui fazer o motor iterar por todas as placas, assim:

class Codigo {

    constructor(texto) {

        try {
            if(!this._valida(texto));

        } catch (e) {
            (`O texto ${texto} não é um código válido`);
        } finally {
            this._valida(texto);
        }
        this._texto = texto;
    }

    _valida(texto) {

        return /\D{3}-\D{2}-\d{2}/.test(texto);
    }

    get texto() {

        return this._texto;
    }

}

O problema, porém, é que ele não me avisa quando a placa é inválida. Continuarei tentando.

O problema dessa última tentativa é que ela não valida de fato a placa, além de estar mal escrita, só fui tentando.

solução!

Fala ai Camila, tudo bem? Nesse último código que tu mandou, dentro da função _valida, tente criar um if e realizar o throw, algo assim:

_valida(texto) {
    if (/\D{3}-\D{2}-\d{2}/.test(texto)) {
        return true
    }
    throw new Error();
}

Dessa maneira, ao lançar um novo erro com o throw vai cair no catch do try e deve exibir a mensagem.

Espero ter ajudado.

Eu não tinha entendido como associar o 'throw' ao 'try' e ao 'catch', mas a sua sugestão foi a solução!

Boa Camila, fico feliz que tenha dado certo.

Sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.