Option

We have already seen some use of Option<T>. It stores either a value of type T or nothing. For example, String::find returns an 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 um Option, 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 verificar None.
    • É comum unwrap/expect em todos os lugares ao hackear algo, mas o cĂłdigo de produção normalmente lida com None de uma maneira mais elegante.
  • A otimização de nicho significa que Option<T> muitas vezes tem o mesmo tamanho na memĂłria que T.