Slide 1

Slide 1 text

Scala 3 A Quick Tour @DanielaSfregola Scala Italy - October 2021

Slide 2

Slide 2 text

Hellooooo • Software Engineer 
 living in London UK • Scala Lover ❤ • OS Maintainer • Author of 
 "Get Programming with Scala" by Manning
 
 35% OFF on EVERYTHING
 with code "ctwscalait21"

Slide 3

Slide 3 text

Scala 3 is here! • After 8 years of work • 28,000 commits • 7,400 pull requests • 4,100 closed issues • ...released on May 13th, 2021! https://www.scala-lang.org/blog/2021/05/14/scala3-is-here.html

Slide 4

Slide 4 text

An overview • https://dotty.ep fl .ch/docs/reference/overview.html

Slide 5

Slide 5 text

@main Annotation object HelloWorld extends App { println("Hello World!" ) }

Slide 6

Slide 6 text

@main Annotation object HelloWorld extends App { println("Hello World!" ) } object HelloWorld { @main def hello: Unit = { println("Hello world!" ) } }

Slide 7

Slide 7 text

@main Annotation object HelloWorld extends App { println("Hello World!" ) } object HelloWorld { @main def hello: Unit = { println("Hello world!" ) } } object Hello { @main def echo(n: Int, word: String): Unit = { println(word * n ) } }

Slide 8

Slide 8 text

Parametrized Traits trait Nameable { def name: Strin g }

Slide 9

Slide 9 text

Parametrized Traits trait Nameable { def name: Strin g } trait Nameable(name: String)

Slide 10

Slide 10 text

Intersection Types class A class B def foo: A & B = ???

Slide 11

Slide 11 text

Union Types class A class B def foo: A | B = ???

Slide 12

Slide 12 text

Package Object // in file my/demo/package.scal a package m y package object demo { def customLog(msg: String) { println(s"Customised package log: $msg" ) } }

Slide 13

Slide 13 text

Package Object // in file my/demo/package.scal a package m y package object demo { def customLog(msg: String) { println(s"Customised package log: $msg" ) } } [ DROPPED ]

Slide 14

Slide 14 text

Enums sealed abstract class Color(val rgb: Int)
 case object Red extends Color(0xFF0000 ) case object Green extends Color(0x00FF00 ) case object Blue extends Color(0x0000FF)

Slide 15

Slide 15 text

Enums sealed abstract class Color(val rgb: Int)
 case object Red extends Color(0xFF0000 ) case object Green extends Color(0x00FF00 ) case object Blue extends Color(0x0000FF) enum Color(val rgb: Int) : case Red extends Color(0xFF0000 ) case Green extends Color(0x00FF00 ) case Blue extends Color(0x0000FF)

Slide 16

Slide 16 text

Improved Type Inference Map("Scala" -> 3).map { (k, v) => s"$k$v" }

Slide 17

Slide 17 text

Improved Type Inference Map("Scala" -> 3).map { (k, v) => s"$k$v" } Scala 2.13.4

Slide 18

Slide 18 text

Improved Type Inference Map("Scala" -> 3).map { (k, v) => s"$k$v" } Scala 2.13.4

Slide 19

Slide 19 text

Improved Type Inference Map("Scala" -> 3).map { (k, v) => s"$k$v" } Scala 3.0.0

Slide 20

Slide 20 text

Improved Type Inference Map("Scala" -> 3).map { (k, v) => s"$k$v" } Scala 3.0.0 Scala 2.13.4

Slide 21

Slide 21 text

Procedure Syntax def echo(str: String) { st r }

Slide 22

Slide 22 text

Procedure Syntax def echo(str: String) { st r } Scala 2.13.4

Slide 23

Slide 23 text

Procedure Syntax def echo(str: String) { st r } Scala 2.13.4

Slide 24

Slide 24 text

Procedure Syntax def echo(str: String) { st r } Scala 3

Slide 25

Slide 25 text

Procedure Syntax def echo(str: String) { st r } Scala 3

Slide 26

Slide 26 text

Improved Error Messages Arrested Developers What the Scala Compiler & Lucille Bluth 
 Have In Common by Fiona Condon, NeScala 2017 https://www.youtube.com/watch?v=78iIbiRwFTM

Slide 27

Slide 27 text

Improved Error Messages def echo(str: String): Unit = { st r } def echoTwice(str: String): String = { echo(str) match { case x: String => s"$x$x " } }

Slide 28

Slide 28 text

Improved Error Messages Scala 2.13.4

Slide 29

Slide 29 text

Improved Error Messages Scala 2.13.4 Scala 3

Slide 30

Slide 30 text

Strict Equality List("Scala", "3").headOption == "Scala"

Slide 31

Slide 31 text

Strict Equality List("Scala", "3").headOption == "Scala" Scala 2.13.4

Slide 32

Slide 32 text

Strict Equality List("Scala", "3").headOption == "Scala" Scala 2.13.4 Scala 3

Slide 33

Slide 33 text

Compatibility with 2.13 Migrating to Scala 3 is easy* ! * if you are using Scala 2.13 * if you don't have macros in your code Scala 3 Migration Guide https://docs.scala-lang.org/scala3/guides/migration

Slide 34

Slide 34 text

Thank You! •Twitter: @DanielaSfregola •"Get Programming with Scala" 
 by Manning
 
 35% OFF on EVERYTHING 
 with code "ctwscalait21"