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.