Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

vasco16

Usar excepções

Mensagens Recomendadas

Knitter

Não sei o que são classes servidores, isso do "sem main" não tem qualquer significado. Mas o uso de excepções é correcto sempre que seja necessário :)

De outra forma, se precisas fazer o tratamento de erros então é correcto usar excepções porque as excepções existem na linguagem Java para o tratamento de erros. Não deves usar excepções para tentar controlar o fluxo do teu programa nem para devolveres valores para algum método através da propagação de excepções.

Também não deves usar excepções a substituir validações, por exemplo, não usar a excepção NullPointerException para ver se um valor é null, neste caso um simples if resolve o problema.

Resumindo, tens necessidade de tratar condições de erro (falha em ligações de rede, parâmetros inválidos de método, falhas de hardware, erros de conversões, etc.) então deves usar excepções.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bruno1234

Outra sugestão que deixo é tratares as excepções individualmente, ou seja um catch para cada excepção que pode acontecer, porque o tratamento para cada uma pode ser diferente.

No fim de todas as outras metes então o catch a Exception.


Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

No fim de todas as outras metes então o catch a Exception.

Esta não é uma excepção que tipicamente se trate, ou melhor, esta classe é demasiado genérica e certamente existe na API de excepções, uma que melhor represente o erro encontrado, por isso nem sequer deve estar no tratamento a não ser que sejas obrigado pelo algum método que estejas a usar.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
softklin

Penso que o vasco16 se refere a classes que serão usadas como bibliotecas. Eu não tenho noção das boas práticas, mas acho que se a classe servidor conseguir tratar os erros o deve fazer, senão também podes optar por atirar ("throws") excepções para os clientes as tratarem, por exemplo:

public void efectuarDivisao(int numerador, int denominador) throws ArithmeticException {
  // aqui podemos ter o típico erro da divisão por 0, que será atirada (throws) pelo método
  // neste caso, o cliente deve tratar essa excepção
  this.resultado = numerador / denominador;
}


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Esse é o exemplo excelente de como não usar uma excepção :). Um simples if(quociete != 0) seria melhor que lançar uma excepção.

Quem trata os erros já depende do que se pretende, mas tipicamente, se estamos a desenvolver uma aplicação, todos os erros são tratados por nós. Se estamos a desenvolver uma biblioteca devemos tratar os erros que dizem respeito ao funcionamento interno da biblioteca e enviar os restantes para o programador.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bruno1234

No caso das bibliotecas eu opto por não usar o try/catch, mas sim o throws.

Sempre que ocorrer uma situação excepcional, a biblioteca lança uma excepção conhecida e documentada e com uma mensagem o mais expressiva possivel.

Quem usa a biblioteca então decide se quer fazer o try/catch.


Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Quem usa a biblioteca então decide se quer fazer o try/catch.

Neste caso obrigas a que a excepção seja, obrigatoriamente, tratada, em última análise terá de ser tratada no método main. Mas terá sempre de ser tratada, não é uma escolha :).

Mas usas essa técnica mesmo para erros que te dizem respeito apenas a ti, neste caso apenas à biblioteca? É que não faz sentido ser o programador que está a usar a biblioteca a tentar recuperar de erros internos da mesma, na altura em que o programador apanha a excepção, não há nada a recuperar.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
softklin

Esse é o exemplo excelente de como não usar uma excepção ;). Um simples if(quociete != 0) seria melhor que lançar uma excepção.

Sim, mas só se não for numa biblioteca. Naquele caso, apresentei como sendo uma função de uma biblioteca, em que não há resolução possível, a não ser atirar uma excepção para o cliente saber que falhou.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Sim, mas só se não for numa biblioteca. Naquele caso, apresentei como sendo uma função de uma biblioteca, em que não há resolução possível, a não ser atirar uma excepção para o cliente saber que falhou.

Não, isso é usar excepções para fazer controlo de variáveis que não faz sentido. Se tens uma divisão então deves verificar os valores de modo a não fazeres a divisão por zero. Se pretendes informar o programador, então devolve-lhe zero ou no caso do método não devolver o resultado, devolve false. Usar uma excepção para esse controlo não é correcto, além de ser uma penalização de performance para uma coisa simples, estás a usar a excepção para evitares fazer código de qualidade, seja uma biblioteca ou não. É uma situação básica para a qual deves fazer as protecções e não usar excepções. O mesmo acontece com verificações de posições em arrays ou verificações de null dado que isto são situações para as quais tens forma de controlar facilmente as variáveis e evitar a existência do erro. Este tipo de excepções são provocadas por erros de programação, e nesse caso fora do objectivo das excepções.

O artigo vai de encontro ao que indiquei, se é uma excepção interna da biblioteca, não deve ser forçada no programador, embora o autor do artigo considere que deve ser enviada uma unchecked exception e eu prefira que as minhas bibliotecas recuperem sempre que o erro é interno.

Mas em geral não concordo com a ideia que ele dá do uso de excepções, parece-me que está a definir o seu uso com base no que é comummente feito por programadores em vez de definir com base no objectivo do mecanismo de excepção. Eu não acho que deva mudar uma tecnologia só porque os programadores que a usam não o sabem fazer ;), mas esta é apenas a ideia que me dá do texto, não quero com isto dizer que tenha sido a intenção do autor.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.