Neuigkeiten in Scala 3

Aufzeichnung

Zusammenfassung

Seit geraumer Zeit in Arbeit, erschien die finale Version von Scala 3.0 im Mai 2021. Höchste Zeit, sich die verschiedenen Neuerungen anzuschauen. Denn es wurden nicht nur alte Features gestrichen, sondern auch die existierenden aufpoliert und konsistenter gestaltet. So gibt es beispielsweise vereinfachte Aufzählungstypen, die auch für Neulinge leichter verständlich sind. Darüber hinaus wagt Scala 3 auch den Schritt in Richtung Whitespace-basierter Syntax. Insgesamt hat das Team um Martin Odersky ein interessantes Paket geschnürt, so dass Programmieren in Scala noch mehr Spaß macht als früher. Auch für Fans von Kotlin und Java 8+ ist etwas dabei.

Folien

Download (PDF)
Klicke zum Fokussieren. Dann kannst du mit den Pfeiltasten navigieren. Bei Mobilgeräten einfach wischen.

Events

Code-Beispiele

// Enumerations
enum Colour:
  case Cyan, Magenta, Red

enum BrushType:
  case Pencil(colour: Colour)
  case Ink(colour: Colour, tilt: Float)
  case Smudge(force: Int)
  case Eraser

case class Brush(size: Int, brushType: BrushType)

// optionale Klammern
trait Semigroup[T]:
  def combine(x: T, y: T): T

  extension (xs: List[T])
    def combineAll: T =
      xs.reduceLeft(combine)

given Semigroup[String] with
  def combine(x: String, y: String): String =
    x + y

def fact(n: Int): Int =
  if n <= 0 then
    1
  else
    n * fact(n - 1)

// neue Implicits
case class Circle(x: Double, y: Double, radius: Double)

extension (c: Circle) def circumference: Double =
  c.radius * math.Pi * 2

trait Semigroup[T] {
  def combine(x: T, y: T): T

  def combineAll(xs: List[T]): T =
    xs.reduceLeft(combine)

  extension (xs: List[T]) def combineAll: T =
    xs.reduceLeft(combine)
}

given Semigroup[String] with {
  def combine(x: String, y: String): String =
    x + y
}

// opake Typen
object Time {
  opaque type Milliseconds = Int
  opaque type Seconds = Int

  extension (num: Int) def seconds: Seconds =
    num

  extension (num: Seconds) def toMillis: Milliseconds =
    num * 1000
}

Artikel

Zu diesem Thema habe ich zwei Artikel geschrieben, die jeweils frei online verfügbar sind: