Coincidencia de rangos
Parte de la sección Logic & Flow del Journey de Rust de Coddy — lección 3 de 66.
Cuando necesitas comprobar si un valor se encuentra dentro de un determinado rango de números, escribir brazos separados para cada valor individual sería tedioso. La expresión match de Rust admite patrones de rango que te permiten realizar coincidencias contra un intervalo continuo de valores utilizando la sintaxis start..=end.
El operador ..= crea un rango inclusivo, lo que significa que tanto el valor inicial como el final se incluyen en la coincidencia. Aquí se muestra cómo puedes usar rangos en los brazos de match:
let temp = 20;
match temp {
30..=50 => println!("Hot"),
10..=29 => println!("Warm"),
_ => println!("Cold"),
}En este ejemplo, una temperatura de 20 coincidiría con el rango 10..=29 e imprimiría "Warm". El rango 30..=50 incluye tanto el 30 como el 50, por lo que las temperaturas de exactamente 30 o 50 darían como resultado "Hot".
Desafío
FácilRecibirás una edad como entrada. Lee la entrada, conviértela en un entero y usa una expresión match con patrones de rango para imprimir la categoría de edad adecuada.
Requisitos:
- Si la edad es
0..=12, imprime"Child" - Si la edad es
13..=19, imprime"Teenager" - Si la edad es
20..=64, imprime"Adult" - Si la edad es
65..=120, imprime"Senior" - Para cualquier otra edad, imprime
"Invalid age"
Entrada: Un único número entero que representa la edad
Salida: Imprime la categoría de edad: "Child", "Teenager", "Adult", "Senior", o "Invalid age"
Hoja de referencia
Los patrones de rango en las expresiones match te permiten coincidir con un tramo continuo de valores utilizando la sintaxis start..=end, donde ..= crea un rango inclusivo (se incluyen tanto el valor inicial como el final).
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"),
}En este ejemplo, una puntuación de 85 coincide con el rango 80..=89 e imprime "Grade: B". El rango 90..=100 incluye tanto el 90 como el 100.
Pruébalo tú mismo
use std::io;
fn main() {
// Leer la 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: Escribe tu código a continuación usando una expresión match con patrones de rango
// Imprimir el resultado
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Flujo de control avanzado
La expresión 'match'Coincidencia de múltiples valoresCoincidencia de rangosLa expresión 'if let'Bucles como expresionesResumen - Analizador de comandos simple4Agrupando datos con Structs
¿Qué es un Struct?Visión general de los StructsAcceso a los campos de un StructStructs mutablesStructs como parámetros de funcionesStructs de tuplaResumen - Crear un Struct de Libro7Manejo de errores con 'Result'
¿Qué es un 'Result'?Uso de 'match' con 'Result'is_ok() e is_err()Atajos: unwrap y expectEl operador de signo de interrogación '?'Parsing de Strings a númerosResumen - Función de división segura10Closures y funciones anónimas
¿Qué es un Closure?Definir un Closure simpleClosures con parámetrosCapturar el entornoResumen - Closure sumador simple2Introducción a los vectores
¿Qué es un vector?Crear un vectorAñadir elementos con pushAcceder a los elementos de un vectorIterar sobre un vectorIteración mutableEliminar elementosResumen: Rastreador de puntuación básico5Pares clave-valor con Hash Maps
¿Qué es un Hash Map?Crear un Hash MapInsertar pares clave-valorAcceder a los valoresIterar sobre un Hash MapActualizar un valorEliminar un parRepaso: Contador de palabras8Proyecto: Inventario simple de artículos
Configuración del proyectoAgregar un artículoVerificar el stockVender un artículoUniendo todo3Lista de tareas en la línea de comandos
Configuración del proyectoAñadir una tareaVer todas las tareasEliminar una tareaCódigo final