Estávamos discutindo com nossos colegas de trabalho o que significa se o nome do método começa com "Try".
Havia as seguintes opiniões:
- Use "Try" quando o método puder retornar um valor nulo.
- Use "Try" quando o método não lançar uma exceção.
Qual é a definição oficial? O que "Try" diz no nome do método? Existe alguma diretriz oficial sobre isso?
c#
naming-conventions
ms007
fonte
fonte
Respostas:
Isso é conhecido como padrão TryParse e foi documentado pela Microsoft. A página oficial do Exceções e Desempenho do MSDN diz :
Portanto, se você tiver um código para o qual um caso de uso regular significaria que poderia gerar uma exceção (como analisar um int), o padrão TryParse faz sentido.
fonte
(Corrigido) Há diretrizes oficiais, como Erik sugeriu.
Quando vejo o
TrySomething
método, presumo quebool
Something
método que me permite lidar com qualquer exceção. (editar, sugerido por Jesse Webb)fonte
TryFoo
método, haverá umFoo
método semelhante que me permitirá lidar com quaisquer `` exceções eu mesmo. As assinaturas desses métodos provavelmente serão diferentes, portanto seus usos não são intercambiáveis sem outras alterações de código.Eu acho que você deve usar
try
quando quiser prosseguir. Não importa que um método retorne algum valor ou não.Caso 1: se retornar bem, você pode prosseguir de alguma maneira.
Caso 2: se não retornar: ainda está bom; você pode prosseguir de outra maneira.
E se você espera algum valor como saída desse método, use o
out
parâmetroExemplo
fonte
Você precisa usar "Try" no nome do método, quando quiser manifestar o fato de que a invocação do método pode produzir um resultado inválido. Seguindo o padrão .NET, a propósito, não é uma função que gera uma exceção, mas a função que retorna algum valor ,
VALID
ouNON_VALID
do ponto de vista do programa.No final, trata-se de uma convenção de nomenclatura que você decide usar em seu grupo.
fonte
Certifique-se de incluir
try
no seu nome do método se:bool TrySomething(input, out yourReturn)
Então, basicamente, se usarmos
try
-methods, apenas obteremos um resultado booleano.Portanto, o código a seguir não lançará nenhuma exceção:
Considerando que este código pode (e neste caso irá) lançar exceções:
Usar os métodos Try é uma maneira mais segura e defensiva de codificar. Além disso, o snippet de código nº 2 exige mais desempenho para ser executado se não for um número inteiro.
fonte
int number = int.Parse(input);
se você quiser que seja mais significativo nesse contexto.int number;
declaração antes do bloco try e danumber = ...
atribuição.TryLoadFile(path, out file)
woah, fora da RAM. Portanto, o responsável pela chamada não esperaria erros por um caminho ruim ou acesso negado, mas uma exceção para as coisas mais estranhas que também poderiam dar errado. E documente.Tio Bob dá o exemplo abaixo em seu livro Clean Code . Sempre que esperamos que uma exceção seja lançada, podemos usar o
Try
prefixo para o nome de um método:E então (adaptado):
O
tryToShutDown
método não faz nenhum tratamento de erros, porque essa é a responsabilidade dosendShutDown
método.O
TryParse
padrão da Microsoft viola a diretriz de código limpo que diz que devemos evitar os parâmetros de saída.Se não estamos desenvolvendo uma nova versão do C #, não precisamos seguir todas as diretrizes da Microsoft. Às vezes eles não são os melhores.
fonte