Guardas y vinculaciones en match
Añada condiciones y capture valores
Guardas y vinculaciones en match es una lección gratuita de Learn Rust Coding en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn Rust Coding, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn Rust Coding incluye 4 lecciones en total.
¿Qué es una guarda de match?
Una guarda de match es una condición if adicional que se añade a un brazo de match. El brazo solo se ejecuta cuando el patrón coincide y la condición es verdadera.
Permite dividir una variante en casos más específicos según sus datos.
match number {
Some(n) if n > 0 => println!("positive"),
Some(n) => println!("zero or negative"),
None => println!("no number"),
}Sintaxis de las guardas
Escriba el patrón, después if condition y, a continuación, =>. La condición puede usar cualquier variable vinculada por el patrón.
Si la guarda es falsa, Rust continúa con el siguiente brazo.
fn main() {
let n = 4;
match n {
x if x % 2 == 0 => println!("even"),
_ => println!("odd"),
}
}Guardas con datos de enums
Las guardas son especialmente útiles con enums que contienen datos. Vincule el valor interno y después compruébelo.
Aquí, un saldo positivo y uno negativo reciben mensajes distintos, aunque ambos pertenezcan a la misma variante.
enum Account {
Balance(i32),
Closed,
}
fn main() {
let a = Account::Balance(-5);
match a {
Account::Balance(b) if b < 0 => println!("overdrawn"),
Account::Balance(b) => println!("balance {}", b),
Account::Closed => println!("closed"),
}
}El orden sigue siendo importante
Como los brazos se prueban de arriba abajo, coloque el brazo con guarda más específico antes que el general.
Si el brazo simple Balance(b) apareciera primero, coincidiría con todo y el brazo con guarda nunca se ejecutaría.
Hacer matching con valores literales
También puede comparar directamente con literales específicos en el patrón, sin usar una guarda.
Aquí, 0 y 1 deben coincidir exactamente, y _ gestiona el resto.
fn main() {
let n = 1;
match n {
0 => println!("zero"),
1 => println!("one"),
_ => println!("many"),
}
}Hacer matching con rangos
Los patrones pueden coincidir con un rango de valores mediante ..=, que incluye ambos extremos.
Esta es una alternativa clara a varias guardas de comparación.
fn main() {
let score = 85;
match score {
0..=59 => println!("fail"),
60..=100 => println!("pass"),
_ => println!("out of range"),
}
}Vincular con el operador @
El operador @ permite comprobar un valor con un patrón y vincularlo a un nombre al mismo tiempo.
Aquí, id @ 1..=5 comprueba el rango y guarda el valor real en id para que pueda imprimirlo.
fn main() {
let n = 3;
match n {
id @ 1..=5 => println!("small id {}", id),
other => println!("other {}", other),
}
}Vincular el valor completo
Un nombre simple en un patrón, como other arriba, vincula el valor completo. Actúa como un comodín que todavía puede usar.
Use _ cuando quiera ignorar el valor, y un nombre cuando lo necesite.
fn main() {
let n = 99;
match n {
0 => println!("zero"),
value => println!("got {}", value),
}
}Combinar guardas y bindings
Puede combinar un binding con una guarda para obtener un control preciso: vincule los datos y después añada una condición.
Este programa marca de forma especial los saldos pares y grandes.
enum Account {
Balance(i32),
}
fn main() {
let a = Account::Balance(200);
match a {
Account::Balance(b) if b > 100 && b % 2 == 0 => println!("big even {}", b),
Account::Balance(b) => println!("normal {}", b),
}
}Guardas sobre varios patrones
Una guarda se aplica a todo el brazo, incluso cuando este combina patrones con |.
La condición se comprueba después de que coincida cualquiera de los patrones indicados.
fn main() {
let n = 6;
match n {
2 | 4 | 6 if n > 3 => println!("big even"),
_ => println!("other"),
}
}Cómo integrarlo todo
Este programa final combina variantes con datos, un binding, una guarda y un comodín para clasificar una lectura de temperatura.
Cambie el valor y vuelva a ejecutar el programa para ver cómo se activan distintos brazos.
enum Reading {
Temp(i32),
Missing,
}
fn main() {
let r = Reading::Temp(38);
match r {
Reading::Temp(t) if t >= 38 => println!("fever: {}", t),
Reading::Temp(t) => println!("normal: {}", t),
Reading::Missing => println!("no reading"),
}
}Comprobación rápida
Compruebe su comprensión de las guardas y los bindings.
Resumen
Ha aprendido a perfeccionar los matchers con guardas (pattern if condition), a hacer matching con literales y rangos (..=) y a crear bindings con nombres o con el operador @.
Al combinar esto con todo lo anterior, ahora puede modelar conjuntos fijos de estados, asociarles datos y reaccionar con precisión ante cada caso. ¡Excelente trabajo con los enums y match!
Preguntas frecuentes
¿La lección «Guardas y vinculaciones en match» es gratis?
Sí — el texto completo de «Guardas y vinculaciones en match» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn Rust Coding, actualiza a CoddyKit PRO. El curso de Learn Rust Coding incluye 4 lecciones en total.
¿Qué aprenderé en «Guardas y vinculaciones en match»?
Añada condiciones y capture valores Practicas Learn Rust Coding con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Learn Rust Coding?
No se requiere experiencia previa. Learn Rust Coding en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Guardas y vinculaciones en match»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Learn Rust Coding?
Sí. Cada lección de Learn Rust Coding incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Definir su primer enum
- Usar match con variantes de enum
- Enums con datos
- Guardas y vinculaciones en match