Correspondência de Intervalos
Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 3 de 66.
Quando você precisa verificar se um valor está dentro de um determinado intervalo de números, escrever braços separados para cada valor individual seria tedioso. A expressão match do Rust suporta padrões de intervalo que permitem que você faça a correspondência com um intervalo contínuo de valores usando a sintaxe start..=end.
O operador ..= cria um intervalo inclusivo, o que significa que tanto o valor inicial quanto o final estão incluídos na correspondência. Veja como você pode usar intervalos em braços de match:
let temp = 20;
match temp {
30..=50 => println!("Hot"),
10..=29 => println!("Warm"),
_ => println!("Cold"),
}Neste exemplo, uma temperatura de 20 corresponderia ao intervalo 10..=29 e imprimiria "Warm". O intervalo 30..=50 inclui tanto 30 quanto 50, portanto, temperaturas de exatamente 30 ou 50 resultariam em "Hot".
Desafio
FácilVocê receberá uma idade como entrada. Leia a entrada, converta-a para um número inteiro e use uma expressão match com padrões de intervalo (range patterns) para imprimir a categoria de idade apropriada.
Requisitos:
- Se a idade for
0..=12, imprima"Child" - Se a idade for
13..=19, imprima"Teenager" - Se a idade for
20..=64, imprima"Adult" - Se a idade for
65..=120, imprima"Senior" - Para qualquer outra idade, imprima
"Invalid age"
Entrada: Um único número inteiro representando a idade
Saída: Imprima a categoria de idade: "Child", "Teenager", "Adult", "Senior", ou "Invalid age"
Folha de consulta
Padrões de intervalo em expressões match permitem que você faça a correspondência com um intervalo contínuo de valores usando a sintaxe start..=end, onde ..= cria um intervalo inclusivo (tanto os valores de início quanto os de fim são incluídos).
let score = 85;
match score {
90..=100 => println!("Grade: A"),
80..=89 => println!("Grade: B"),
70..=79 => println!("Grade: C"),
60..=69 => println!("Grade: D"),
_ => println!("Grade: F"),
}Neste exemplo, uma pontuação de 85 corresponde ao intervalo 80..=89 e imprime "Grade: B". O intervalo 90..=100 inclui tanto 90 quanto 100.
Experimente você mesmo
use std::io;
fn main() {
// Ler a entrada
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let age: i32 = input.trim().parse().expect("Please enter a valid number");
// TODO: Escreva seu código abaixo usando uma expressão match com padrões de intervalo
// Imprimir o resultado
}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 Final