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
.