Controle de Erros em JS

Esse necessita de criatividade: controle de erros em JavaScript. Sabe aqueles erros de linguagem que mostram uma mensagem muito bem escrita? E sabe aqueles erros que (para os usuários) parecem inexplicáveis quando eles rodam seus scripts? Podemos transformar a segunda situação na primeira.

Em JavaScript existe um objeto chamado Error, que é obviamente uma mensagem de erro. Essa mensagem pode conter também um número. Veja:


var comNumero = new Error(0, "Erro Desconhecido");
var semNumero = new Error("Erro sem número");

Tá certo, isso não faz sentido. Geralmente eu começo explicando assim, é um vício. Mas as coisas começarão a ficar claras.
Quando criamos nossos scripts (para nosso próprio uso), dificilmente eles funcionarão com erros, pois nós sabemos (ou devíamos) o que o script faz e os erros que podem acontecer se não fizermos. Portanto, não fazemos um controle de erros por que não é necessário. Já se criarmos um script para ser distribuído, o usuário pode não saber exatamente o que acontece, e isso fatalmente resultará em um erro, que poderá ser fatal, fatalmente acabando com os planos do pobre coitado. Talvez o usuário não entenda exatamente o que quer dizer os erros do console, resultando em um pequeno problema.
É pra isso que usamos esse controle de erros. Ele pode prevenir uma entrada de dados errada, uma função com algum parâmetro faltando, essas coisas, fazendo com que o script gere um erro antes, com a mensagem que você deseja, tornando tudo mais claro.

Só que há uma situação atenuante: criando um erro não quer dizer que ele aconteceu. Entretanto podemos fazer isso através da palavra-chave throw.

var erro = new Error("Erro Desconhecido");
throw erro;

Isso, no console do Firefox, resultaria: “Erro Desconhecido [nova linha]throw erro;”, ou coisa parecida. Se tivermos um número de erro, a coisa seria assim: “0 [nova linha]Erro Desconhecido”, onde “0″ é o número do erro.
E como testamos se alguma coisa aconteceu errado? Com if, seria o mais lógico. Mas se quisermos saber quando uma função retornou um erro:

try { funcErro(); }
catch(e) { alert("O erro foi " + e); }

try é o que tentamos. catch é quando dá algo errado, usando geralmente e como erro retornado. Também há o finally, que é executado de qualquer maneira no final disso tudo aí.
Como estava sem nada mais interessante pra fazer, criei o código abaixo para criação e retorno de erros, pra deixar o negócio mais abreviado.

var JsError = {
  "Throw": function() {
    this.message = arguments[0] || "Erro Desconhecido";
	this.number = arguments[1] || 0;
	this.error = new Error(this.number, this.message);
	throw this.error;
  },
  "Create": function() {
    this.message = arguments[0] || "Erro Desconhecido";
	this.number = arguments[1] || 0;
	this.error = new Error(this.number, this.message);
  	return this.error;
  }
}

Observação: o número da linha retornado pelo erro é onde o erro foi criado (new Error), e não no throw (pelo menos no Firefox).

Posts Relacionados

Postado em janeiro 05, 2007 às 20:39

Comentários

  1. Bernardo Rufino

    Hehe, nem sabia que isso existia em Js! Vlww!!


  2. Ramon

    bem legal…
    vlw


  3. Micox

    Rapá, o Julio é meu herói.
    Ótima postagem cara.


Deixe seu comentário