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.unwrap
retornará 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
/expect
em todos os lugares ao hackear algo, mas o código de produção normalmente lida comNone
de 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
.