Guardas y binding
Condiciones en las coincidencias
Guardas y binding es una lección gratuita de Scala for Backend Engineering & Functional Programming en CoddyKit. Esta es la lección 3 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 Scala for Backend Engineering & Functional Programming, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Scala for Backend Engineering & Functional Programming incluye 4 lecciones en total.
¿Qué es una guardia?
Una guardia añade una condición booleana a un caso mediante if. El caso solo coincide cuando el patrón encaja y la guardia es verdadera.
Las guardias permiten dividir un único patrón en casos más precisos según el valor.
Añadir una guardia con if
Escriba la guardia después del patrón: case n if n > 0 =>. Si la condición es falsa, la coincidencia continúa con el siguiente caso.
object Main {
def sign(n: Int): String = n match {
case x if x > 0 => "positive"
case x if x < 0 => "negative"
case _ => "zero"
}
def main(args: Array[String]): Unit = {
println(sign(5))
println(sign(-3))
println(sign(0))
}
}Vincular y después usar una guardia
La guardia puede hacer referencia al nombre vinculado en el patrón. Así puede comprobar propiedades del valor coincidente.
object Main {
def fizz(n: Int): String = n match {
case x if x % 15 == 0 => "FizzBuzz"
case x if x % 3 == 0 => "Fizz"
case x if x % 5 == 0 => "Buzz"
case x => x.toString
}
def main(args: Array[String]): Unit = {
println(fizz(15))
println(fizz(9))
println(fizz(7))
}
}Guardias para rangos
Las guardias son perfectas para expresar rangos, algo que los patrones literales no pueden hacer directamente.
object Main {
def band(score: Int): String = score match {
case s if s >= 90 => "A"
case s if s >= 80 => "B"
case s if s >= 70 => "C"
case _ => "F"
}
def main(args: Array[String]): Unit = {
println(band(95))
println(band(83))
println(band(60))
}
}Vinculación de patrones con @
El símbolo @ vincula el valor coincidente completo a un nombre y, al mismo tiempo, permite hacer coincidir su estructura.
Aquí, whole @ pattern significa: hacer coincidir pattern y llamar también whole al valor coincidente.
object Main {
def main(args: Array[String]): Unit = {
val x: Any = 7
val msg = x match {
case n @ (_: Int) => s"int value is $n"
case _ => "other"
}
println(msg)
}
}Vinculación en colecciones
La vinculación con @ resulta especialmente práctica con patrones estructurados, como al capturar una lista completa mientras se examina también su cabeza.
object Main {
def describe(xs: List[Int]): String = xs match {
case all @ (first :: _) => s"starts with $first, full = $all"
case Nil => "empty"
}
def main(args: Array[String]): Unit = {
println(describe(List(1, 2, 3)))
println(describe(Nil))
}
}Combinar un patrón de tipo y una guardia
Puede combinar un patrón de tipo con una guardia. Primero se comprueba el tipo y después la condición booleana.
object Main {
def label(x: Any): String = x match {
case s: String if s.length > 3 => "long string"
case s: String => "short string"
case _ => "not a string"
}
def main(args: Array[String]): Unit = {
println(label("hello"))
println(label("hi"))
println(label(42))
}
}Varias condiciones
Una guardia no es más que una expresión booleana, por lo que puede combinar condiciones con && y ||.
object Main {
def category(age: Int): String = age match {
case a if a >= 13 && a <= 19 => "teen"
case a if a < 13 => "child"
case _ => "adult"
}
def main(args: Array[String]): Unit = {
println(category(15))
println(category(8))
println(category(40))
}
}Las guardias no continúan con el siguiente caso de forma automática
Si un patrón coincide pero su guardia es falsa, Scala pasa al siguiente caso, no a la siguiente guardia del mismo patrón.
Asegúrese de que un caso posterior pueda capturar los valores que no superen ninguna guardia.
object Main {
def test(n: Int): String = n match {
case x if x > 100 => "big"
case x => s"not big: $x"
}
def main(args: Array[String]): Unit = {
println(test(200))
println(test(5))
}
}¿Por qué usar guardias y vinculación?
Juntas, las guardias y las vinculaciones con @ hacen que la coincidencia de patrones sea expresiva:
- Las guardias añaden condiciones como rangos y divisibilidad
@captura el valor completo mientras lo descompone- Mantienen la lógica de ramificación compacta y legible
Integración
Este ejemplo vincula el valor, comprueba una guardia y proporciona una alternativa.
object Main {
def temp(c: Int): String = c match {
case t if t >= 30 => s"hot ($t)"
case t if t >= 15 => s"mild ($t)"
case t => s"cold ($t)"
}
def main(args: Array[String]): Unit = {
println(temp(35))
println(temp(20))
println(temp(5))
}
}Comprobación rápida
Compruebe su comprensión de las guardias y la vinculación.
Resumen
Ha aprendido a precisar las coincidencias:
- Una guardia es una condición
ifdespués de un patrón - Si la guardia es falsa, la coincidencia pasa al siguiente caso
- El operador
@vincula el valor completo mientras lo descompone - Las guardias se combinan con patrones de tipo y operadores booleanos
Preguntas frecuentes
¿La lección «Guardas y binding» es gratis?
Sí — el texto completo de «Guardas y binding» 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 Scala for Backend Engineering & Functional Programming, actualiza a CoddyKit PRO. El curso de Scala for Backend Engineering & Functional Programming incluye 4 lecciones en total.
¿Qué aprenderé en «Guardas y binding»?
Condiciones en las coincidencias Practicas Scala for Backend Engineering & Functional Programming 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 Scala for Backend Engineering & Functional Programming?
No se requiere experiencia previa. Scala for Backend Engineering & Functional Programming 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 3 de 4.
¿Cuánto tiempo toma la lección «Guardas y binding»?
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 Scala for Backend Engineering & Functional Programming?
Sí. Cada lección de Scala for Backend Engineering & Functional Programming 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
- Expresiones match
- Coincidencia de tipos y valores
- Guardas y binding
- Deconstrucción