Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Pattern Guards in Scala

Introduction

Pattern guards are a powerful feature in Scala that extend the capabilities of pattern matching by allowing additional conditions to be specified. They help refine pattern matches based on certain criteria, enabling more complex and expressive matching scenarios. This tutorial will explore pattern guards, their syntax, and provide examples to illustrate their use.

What are Pattern Guards?

In Scala, pattern matching is a powerful mechanism that allows you to deconstruct data types. Pattern guards enhance this by allowing you to add boolean conditions to your pattern matches. This means that you can match a pattern only if a certain condition is satisfied, making your code more expressive and easier to read.

Syntax of Pattern Guards

The basic syntax for using pattern guards involves the use of the if statement within a pattern match. Here’s the general structure:

match expression match { case pattern if condition => result }

This means that the result will only be evaluated if the pattern matches and the condition evaluates to true.

Example of Pattern Guards

Let's consider a simple example where we want to classify numbers based on their values:

val number = 10
number match {
  case x if x < 0 => "Negative"
  case x if x == 0 => "Zero"
  case x if x > 0 => "Positive"
  case _ => "Unknown"
}

In this example, we match the variable number against different cases. The pattern guard if x < 0 checks if the number is negative, if x == 0 checks if it is zero, and if x > 0 checks for positive numbers. The result will be "Positive" since the value of number is 10.

Output: Positive

Chaining Pattern Guards

You can also chain multiple pattern guards together to create more complex matching conditions. Here’s an example:

val age = 25
age match {
  case x if x < 13 => "Child"
  case x if x >= 13 && x < 20 => "Teenager"
  case x if x >= 20 && x < 65 => "Adult"
  case x if x >= 65 => "Senior"
}

In this example, we classify a person based on their age. The pattern guards allow us to specify different age ranges effectively.

Output: Adult

Conclusion

Pattern guards in Scala provide a powerful way to enhance pattern matching by allowing for additional conditions. This makes it possible to write more expressive and readable code. By understanding and utilizing pattern guards, you can take full advantage of Scala's pattern matching capabilities in your applications.