Pergunta

A maioria das linguagens de programação têm algum tipo de manipulação de exceção;alguns idiomas possuem códigos de retorno, outros têm try/catch, ou de resgate/repetição, etc., cada um com seu próprio pecularities na legibilidade, robustez e eficácia prática em um grupo grande esforço de desenvolvimento.Qual é o melhor e por quê ?

Foi útil?

Solução

Eu diria que depende da natureza do seu problema.Diferentes domínios de problemas, poderá exigir quase arbitrário mensagens de erro, enquanto outras tarefas triviais apenas pode retornar NULL ou -1 em caso de falha.

O problema com os códigos de retorno de erro é que você está poluindo/mascaramento de erro, pois pode ser ignorado (às vezes sem a API cliente não sabendo eles devem verificar se o código de erro).Dá uma (razoavelmente), válido a saída do método na mão.

Imagine que você tenha uma API onde você pede uma chave de índice para algum mapa, armazená-lo em uma lista e, em seguida, continuar a executar.A API, em seguida, em um momento posterior envia uma chamada de retorno, e que o método pode, em seguida, atravessar a tabela, usando a chave que pode ser -1 neste exemplo (o código de erro).BOOM, o aplicativo falha como índice de -1 em alguns matriz, e esses tipos de problemas pode ser muito difícil de unha para baixo.Este é ainda um exemplo trivial, mas ilustra um problema com os códigos de erro.

Por outro lado, os códigos de erro são mais rápidos do que lançar exceções, e você pode querer usá-los para os dados frequentemente acedidos método chama - se é apropriado para o retorno, um código de erro.Eu diria que tentar encapsular esses tipos de códigos de erro dentro de um assembly particular seria muito bem desde que você não está expondo os códigos de erro para o cliente da API.Lembre-se sempre de documento estes métodos rigorosamente uma vez que esses tipos de aplicação de bombas caíam em torno de uma aplicação por um longo tempo desde que eles foram desencadeadas antes de se apagar.

Pessoalmente, eu prefiro uma mistura de ambos, até certo ponto.Eu uso exceções apenas para que - exceções - quando o programa é executado em um estado que não era esperado e deve informar algo deu de maneira fora do plano.Eu não sou um sugador de escrita de blocos try/catch todo o meu código, mas é tudo a preferência pessoal.

Outras dicas

Melhor para o que?Linguagem de design é sempre sobre intercâmbios.A vantagem de códigos de retorno é que eles não necessitam de suporte de tempo de execução para além de regular a função de chamadas;as desvantagens são: 1) você sempre tem de vê-los 2) o tipo de retorno tem de ter uma falha de valor que não é válido o resultado da chamada de função.

A vantagem do automáticas de tratamento de exceção é que as condições de erro no seu código não desaparecem.

As diferenças entre o tratamento de exceção semântica em várias línguas (e Lisp condição de sistema, E ejetores, etc), principalmente, mostrar-se em como desenrolar a pilha é tratada quando a execução do programa deve continuar.

Para resumir, que:automático de manipulação de exceção é extremamente útil quando você precisa escrever legível, de software robusta, especialmente em uma grande equipe.Deixar o computador faixa de condições de erro para você dá a você uma coisa a menos para se pensar ao ler o código, e ele remove uma possibilidade de erro.A única vez que eu iria usar códigos de retorno para indicar erros é se eu era a implementação de uma linguagem de manipulação de exceção em que não tê-lo.

try/catch/finally faz o trabalho de forma admirável.

Ele permite que o programador para lidar com condições específicas, bem como as falhas normalmente.

Tudo dito e feito, eu tenho certeza que cada um é tão bom quanto qualquer outro.

Eu teria que ir com o try / catch conceito.Eu me sinto como em termos de legibilidade, isso fornece mais de um código de mantenedor.Deve ser bastante para a frente para encontrar a cadeia de chamadas de função enquanto a exceção é digitado corretamente e a mensagem associada contém informações detalhadas de dados suficientes (eu, pessoalmente, não gosto, incluindo os rastreamentos de pilha, mas eu sei que muitas que fazer, e isso é ainda mais rastreável.) O código de retorno implementação requer uma tabela externa de definições de código em um programa por programa.Que, a partir de experiência pessoal, tanto difíceis de manter e de referência.

Para incomum perspectiva no tratamento de exceção, ver Haskell da Control.Exception monad

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top