Trusted answers to developer questions
Trusted Answers to Developer Questions

Related Tags

scala

What is pattern matching in Scala?

Adnan Abbas

Grokking Modern System Design Interview for Engineers & Managers

Ace your System Design Interview and take your career to the next level. Learn to handle the design of applications like Netflix, Quora, Facebook, Uber, and many more in a 45-min interview. Learn the RESHADED framework for architecting web-scale applications by determining requirements, constraints, and assumptions before diving into a step-by-step design process.

Pattern matching is a way of checking a value against a pattern. It is a powerful alternative to the switch statement in Java and C/C++ and can replace if-else statements in code.

A match expression has a value, the match keyword, and at least one case clause. The match keyword is used instead of the switch statement.

import scala.util.Random
val x: Int = Random.nextInt(10)
def bb() = x match {
case 0 => "zero"
case 1 => "one"
case 2 => "two"
case _ => "default case"
}
println(bb)

In the code above, x is a random integer that the Random library produces. It becomes the left operand of the match operator, and then we define an expression with four cases. The last case, _, is chosen when none of the cases above are matched.

Matching on case classes

In Scala, we can also use case classes in pattern matching. We will be creating an abstract Notification superclass which has three social media apps, Facebook, Instagram, and Snapchat as types of notification. This is shown below:

abstract class Notification
case class Facebook(sender: String, title: String, body: String) extends Notification
case class Instagram(likes:Int, comment: String) extends Notification
case class Snapchat(sender: String, streak: Int, city: String) extends Notification
def showNotification(notification: Notification): String = {
notification match {
case Facebook(sender, title, body) =>
s"$sender $title on your status: $body"
case Instagram(likes, comment) =>
s"Your picture got $likes! likes & comment: $comment"
case Snapchat(sender, streak,city) =>
s"$sender sent you a snap from $city with streak: $streak"
}
}
val fbNotification = Facebook("John", "comment","Nice pic buddy")
val instaNotification = Instagram(138, "When did you get engaged?")
val snapchatNotification = Snapchat("Ghufran",365,"Lahore")
println(showNotification(fbNotification))
println(showNotification(instaNotification))
println(showNotification(snapchatNotification))

The showNotification function takes the abstract Notification class as its input and produces a String output. It matches the type of notification by figuring out what kind of notification this is (Facebook, Instagram, or Snapchat), and then it performs the appropriate actions defined for each type.

RELATED TAGS

scala

CONTRIBUTOR

Adnan Abbas
Copyright ©2022 Educative, Inc. All rights reserved

Grokking Modern System Design Interview for Engineers & Managers

Ace your System Design Interview and take your career to the next level. Learn to handle the design of applications like Netflix, Quora, Facebook, Uber, and many more in a 45-min interview. Learn the RESHADED framework for architecting web-scale applications by determining requirements, constraints, and assumptions before diving into a step-by-step design process.

Keep Exploring