Result
Nosso mecanismo primĂĄrio para tratamento de erros em Rust Ă© o enum Result
, que vimos brevemente ao discutir tipos da biblioteca padrĂŁo.
Speaker Notes
This slide should take about 5 minutes.
-
Result
tem duas variantes:Ok
que contém o valor de sucesso, eErr
que contém um valor de erro de algum tipo. -
Se uma função pode ou não produzir um erro é codificado na assinatura de tipo da função, fazendo-a retornar um valor
Result
. -
Assim como com
Option
, nĂŁo hĂĄ como esquecer de lidar com um erro: vocĂȘ nĂŁo pode acessar nem o valor de sucesso nem o valor de erro sem primeiro corresponder a um padrĂŁo noResult
para verificar qual variante vocĂȘ tem. MĂ©todos comounwrap
facilitam a escrita de cĂłdigo rĂĄpido e sujo que nĂŁo faz um tratamento de erros robusto, mas significa que vocĂȘ sempre pode ver em seu cĂłdigo-fonte onde o tratamento de erros adequado estĂĄ sendo ignorado.
Mais para Explorar
Pode ser Ăștil comparar o tratamento de erros em Rust com convençÔes de tratamento de erros com as quais os alunos podem estar familiarizados de outras linguagens de programação.
ExceçÔes
-
Muitas linguagens usam exceçÔes, por exemplo, C++, Java, Python.
-
Na maioria das linguagens com exceçÔes, se uma função pode ou nĂŁo lançar uma exceção nĂŁo Ă© visĂvel como parte de sua assinatura de tipo. Isso geralmente significa que vocĂȘ nĂŁo pode dizer ao chamar uma função se ela pode lançar uma exceção ou nĂŁo.
-
ExceçÔes geralmente desmontam a pilha de chamadas, propagando-se para cima até que um bloco
try
seja alcançado. Um erro originado profundamente na pilha de chamadas pode impactar uma função não relacionada mais acima.
NĂșmeros de Erro
-
Algumas linguagens tĂȘm funçÔes que retornam um nĂșmero de erro (ou algum outro valor de erro) separadamente do valor de retorno bem-sucedido da função. Exemplos incluem C e Go.
-
Dependendo da linguagem, pode ser possĂvel esquecer de verificar o valor de erro, caso em que vocĂȘ pode estar acessando um valor de sucesso nĂŁo inicializado ou de outra forma invĂĄlido.