O que é um 'Option'?
Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 35 de 66.
Na programação, você frequentemente encontra situações em que um valor pode ou não estar presente. Por exemplo, pesquisar um item em uma lista pode encontrar o item, ou ele pode não existir de forma alguma. As linguagens de programação tradicionais costumam usar valores especiais como null ou -1 para representar o "nada", mas essa abordagem pode levar a bugs e falhas.
Rust adota uma abordagem diferente com o enum Option<T>. Este é um tipo embutido que representa explicitamente a possibilidade de ausência. Em vez de adivinhar se um valor existe, o Rust força você a lidar com ambos os casos antecipadamente.
O enum Option tem exatamente duas variantes:
Some(value) // Contém um valor
None // Não contém nenhum valorQuando uma função pode não retornar um valor, ela retorna um Option. Se houver um valor para retornar, ela o envolve em Some. Se não houver valor, ela retorna None.
Isso torna a ausência potencial explícita no sistema de tipos, impedindo que você use acidentalmente um valor que não existe.
Você já viu o Option em ação com o método .get() do hash map - ele retorna Some(&value) quando uma chave existe, ou None quando não existe. Este padrão aparece em todo o Rust, tornando seu código mais seguro e previsível.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Folha de consulta
O enum Option<T> representa um valor que pode ou não estar presente, prevenindo bugs ao usar valores inexistentes.
Ele possui duas variantes:
Some(value) // Contém um valor
None // Não contém valorFunções que podem não retornar um valor usam Option. Por exemplo, o método .get() de um hash map retorna Some(&value) quando uma chave existe, ou None quando não existe.
Experimente você mesmo
Esta lição não inclui um desafio de código.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Logic & Flow
1Fluxo de Controle Avançado
A Expressão 'match'Correspondência de Múltiplos ValoresCorrespondência de IntervalosA Expressão 'if let'Loops como ExpressõesRecapitulação - Parser de Comandos Simples4Agrupando Dados com Structs
O que é uma Struct?Visão Geral de StructsAcessando Campos de uma StructStructs MutáveisStructs como Parâmetros de FunçãoTuple StructsRecapitulação - Criando uma Struct Book2Introdução a Vetores
O que é um Vetor?Criando um VetorAdicionando Elementos com pushAcessando Elementos do VetorIterando sobre um VetorIteração MutávelRemovendo ElementosRecapitulação - Rastreador de Pontuação Básico5Pares Chave-Valor com Hash Maps
O que é um Hash Map?Criando um Hash MapInserindo Pares Chave-ValorAcessando ValoresIterando sobre um Hash MapAtualizando um ValorRemovendo um ParRecapitulação - Contador de Palavras8Projeto: Inventário Simples de Itens
Configuração do ProjetoAdicionando um ItemVerificando o EstoqueVendendo um ItemJuntando tudo3Lista de Tarefas via Linha de Comando
Configuração do ProjetoAdicionando uma TarefaVisualizando Todas as TarefasRemovendo uma TarefaCódigo Final6Lidando com a Ausência com 'Option'
O que é um 'Option'?Usando 'match' com 'Option'is_some() e is_none()Fazendo o unwrap de um 'Option'O método expectFornecendo um valor padrão: unwrap_orRecapitulação - Encontrar um Elemento