Option
Já vimos algum uso de Option<T>. Ele armazena um valor do tipo T ou nada. Por exemplo, String::find retorna um Option<usize>.
fn main() {
let name = "Löwe 老虎 Léopard Gepardi";
let mut position: Option<usize> = name.find('é');
println!("find retornou {position:?}");
assert_eq!(position.unwrap(), 14);
position = name.find('Z');
println!("find retornou {position:?}");
assert_eq!(position.expect("Caractere não encontrado"), 0);
}
This slide should take about 10 minutes.
Optioné amplamente utilizado, não apenas na biblioteca padrão.unwrapretornará o valor em umOption, ou entrará em pânico.expecté semelhante, mas recebe uma mensagem de erro.- Você pode entrar em pânico em
None, mas não pode “acidentalmente” esquecer de verificarNone. - É comum
unwrap/expectem todos os lugares ao hackear algo, mas o código de produção normalmente lida comNonede uma maneira mais elegante.
- Você pode entrar em pânico em
- A otimização de nicho significa que
Option<T>muitas vezes tem o mesmo tamanho na memória queT.