O termo "atirar uma exceção"
é muito conhecido pelos programadores Java, uma vez que
o mecanismo existente em JavaScript é bem parecido com
aquele da linguagem Java. "Atirar uma exceção"
significa a criação de um objeto que representa
o tipo de erro a ser tratado. É importante notar que,
o restante do código do bloco em que a exceção
é atirada nunca será executado. Vamos ver um exemplo:
<html>
<head>
<title>Tratamento de erros</title>
</head>
<body>
<script language="javascript">
<!--
function MailFormatoException(mail){
this.email = mail;
this.mensagem = "não é
um endereço de e-mail válido.";
this.toString = function(){
return this.email + "
" + this.mensagem;
};
}
function validarEMail(email){
if(email.indexOf("@") >
-1){
return true;
}
else{
throw new MailFormatoException(email);
}
}
try{
var mail = "suporte.recomende.com";
var valido = validarEMail(mail);
if(valido){
window.alert("Endereço
de e-mail válido.");
}
}
catch(e){
window.alert(e);
}
//-->
</script>
</body>
</html>
Execute esta página e verá uma mensagem de erro
com o seguinte texto: suporte.recomende.com
não é um endereço de e-mail válido.
O código para este exemplo é um daqueles que só
pode ser entendido quando analisado com muita atenção.
Comecemos com o objeto MailFormatoException:
function MailFormatoException(mail){
this.email = mail;
this.mensagem = "não é um endereço
de e-mail válido.";
this.toString = function(){
return this.email + " " +
this.mensagem;
};
}
Veja que sempre que uma nova instancia deste objeto é
criado, nós fazemos o fornecimento de um valor para o
argumento mail. Este valor é usado para
inicializar a propriedade email do objeto:
this.email = mail;
Como este objeto será usado para indicarmos situações
de erro, é mais que adequado que ele possua uma propriedade
para esta finalidade. Esta propriedade se chama mensagem
e é inicializada na linha: this.mensagem
= "não é um endereço de e-mail válido.";
Finalmente, o objeto deverá ter um método toString,
que é chamado automaticamente sempre que o método
para o qual o objeto estiver sendo fornecido, retornar um valor
do tipo String. Veja como este método
retorna uma concatenação das propriedades email
e mensagem: this.toString
= function(){
return this.email + " " + this.mensagem;
};
Veja agora o código para uma função que
verifica se um determinado endereço de e-mail é
válido: function
validarEMail(email){
if(email.indexOf("@") > -1){
return true;
}
else{
throw new MailFormatoException(email);
}
}
A validação deste endereço de e-mail é
bem simples. Tudo que fazemos é verificar a ocorrência
do símbolo @ no endereço. Se você quiser
aprender a fazer validações mais avançadas,
clique aqui e acesse nosso tutorial sobre Expressões
Regulares em JavaScript.
Veja que, se o endereço de e-mail for válido nós
simplesmente retornamos um valor true para
o chamador da função. Se o valor não for
válido nós usamos a instrução throw
para criar uma instancia do objeto MailFormatoException
e fornecemos o valor de email sendo validado. Neste ponto quaisquer
outras linhas de código dentro desta função
não mais seriam executados. A execução
do código volta para o ponto onde a função
validarEMail foi chamada.
Observe agora o código para o bloco try...catch:
try{
var mail = "suporte.recomende.com";
var valido = validarEMail(mail);
if(valido){
window.alert("Endereço de
e-mail válido.");
}
}
catch(e){
window.alert(e);
}
Na primeira linha do bloco try nós criamos
uma variável chamada mail e atribuímos
a ela o endereço de e-mail a ser validado. Em seguida
criamos uma variável chamada valido
e atribuímos a ela o resultado de uma chamada à
função validarEMail fornecendo
o endereço a ser verificado. É aqui que as coisas
acontecem, se a função retornar true, o restante
do bloco try é executado. Ao contrário,
se o resultado for uma instancia do objeto MailFormatoException,
a execução salta diretamente do bloco try
para o bloco catch. Tudo que temos a fazer
é exibir as informações do erro:
catch(e){
window.alert(e);
}
Lembre-se de que a variável "e" representa
o objeto MailFormatoException. Como o método
alert do objeto window retorna
um tipo String, o método toString
de nosso objeto é chamado implicitamente e temos o resultado
que esperávamos.
Ufa! Que código! Entendeu tudo mesmo? |