Scala Quick Reference
Variables & Values
val name: String = "Alice" // immutable
var age: Int = 28 // mutable
val pi = 3.14 // type inferred
lazy val heavy = compute() // lazy evaluation
Pattern Matching
val result = value match {
case 0 => "zero"
case n if n < 0 => "negative"
case n => s"positive: $n"
}
// Matching on types
def describe(x: Any): String = x match {
case i: Int => s"int: $i"
case s: String => s"string: $s"
case _ => "unknown"
}
Case Classes & Sealed Traits
// Case class โ auto equals/hashCode/copy
case class User(name: String, age: Int)
val alice = User("Alice", 28)
val older = alice.copy(age = 29)
// Sealed trait (ADT)
sealed trait Shape
case class Circle(r: Double) extends Shape
case class Rect(w: Double, h: Double) extends Shape
def area(s: Shape): Double = s match {
case Circle(r) => Math.PI * r * r
case Rect(w, h) => w * h
}
Collections
val list = List(1, 2, 3, 4, 5)
list.map(_ * 2) // List(2, 4, 6, 8, 10)
list.filter(_ > 2) // List(3, 4, 5)
list.foldLeft(0)(_ + _) // 15
list.groupBy(_ % 2) // Map(0 -> List(2,4), 1 -> List(1,3,5))
val map = Map("a" -> 1, "b" -> 2)
map.getOrElse("c", 0) // 0
// For comprehension
val pairs = for {
x <- List(1, 2, 3)
y <- List("a", "b")
} yield (x, y)
Option & Either
// Option โ avoids null
val maybeUser: Option[User] = findUser(id)
maybeUser.map(_.name).getOrElse("Guest")
maybeUser.foreach(u => println(u.name))
// Either โ error handling
def parse(s: String): Either[String, Int] =
s.toIntOption.toRight(s"Not a number: $s")
parse("42") // Right(42)
parse("foo") // Left("Not a number: foo")