devterview_$ iniciar simulação

`Result` e `Option` no lugar de null e exceção

MédioPlenoTratamento de erro

Pergunta

Como Rust trata erro e ausência de valor sem null nem exceções, e o que o operador `?` faz?

Resposta esperada

Ausência: `Option<T>` é `Some(T)` ou `None` — não existe null, então você é obrigado pelo compilador a lidar com o caso vazio (via `match`, `if let`, `unwrap_or`, `map`). Erro: `Result<T, E>` é `Ok(T)` ou `Err(E)` — a função devolve o erro como valor, e quem chama tem que tratar ou propagar; não há exceção invisível pulando frames. O operador `?` é açúcar pra propagação: `let x = pode_falhar()?;` — se for `Ok`, extrai o valor; se for `Err`, retorna cedo daquela função com o erro (convertendo o tipo via `From` se preciso). Isso dá tratamento de erro explícito e local, com a ergonomia de não escrever `match` em cada chamada. `panic!` existe pra erros irrecuperáveis/bugs, não pra controle de fluxo.

Por que perguntam isso

Pergunta pleno de Rust. Sinal de domínio: explicar o `?` com precisão (retorno cedo + conversão via From) e situar `panic!` fora do controle de fluxo.

#result#option#error-handling#question-mark
publicidade

Relacionadas