+ All Categories
Home > Technology > Simplifying development-short - Mirco Dotta (Typesafe)

Simplifying development-short - Mirco Dotta (Typesafe)

Date post: 20-Aug-2015
Category:
Upload: scala-italy
View: 254 times
Download: 0 times
Share this document with a friend
Popular Tags:
41
Scala Simplifying Development ScalaDay Italy Milan, May 25, 2013 Mirco Dotta Sunday, May 26, 13
Transcript
Page 1: Simplifying development-short - Mirco Dotta (Typesafe)

ScalaSimplifying Development

ScalaDay ItalyMilan, May 25, 2013

Mirco Dotta

Sunday, May 26, 13

Page 2: Simplifying development-short - Mirco Dotta (Typesafe)

Is Scala the Java of the future?

1/38

Sunday, May 26, 13

Page 3: Simplifying development-short - Mirco Dotta (Typesafe)

• It has basically everything Java has now

• It has closures (planned for Java 8)

• It has rich interfaces (Java 8 defender methods), and more

• It is completely interoperable and runs about as fast as Java

2/38

Sunday, May 26, 13

Page 4: Simplifying development-short - Mirco Dotta (Typesafe)

How is Scala different from Java?

3/38

Sunday, May 26, 13

Page 5: Simplifying development-short - Mirco Dotta (Typesafe)

Concise Syntax4/38

Sunday, May 26, 13

Page 6: Simplifying development-short - Mirco Dotta (Typesafe)

public class Time { private final int hours; private final int minutes; public Time(int hours, int minutes) { this.hours = hours; this.minutes = minutes; } public int getHours() { return hours; } public int getMinutes() { return minutes; }}

class Time(val hours: Int, val minutes: Int)

5/38

Sunday, May 26, 13

Page 7: Simplifying development-short - Mirco Dotta (Typesafe)

Statically typedbut feels dynamic

6/38

Sunday, May 26, 13

Page 8: Simplifying development-short - Mirco Dotta (Typesafe)

val x = 2type is inferred

no semicolon

7/38

Sunday, May 26, 13

Page 9: Simplifying development-short - Mirco Dotta (Typesafe)

Unifies OOP and FP8/38

Sunday, May 26, 13

Page 10: Simplifying development-short - Mirco Dotta (Typesafe)

Every value is an object

9/38

Sunday, May 26, 13

Page 11: Simplifying development-short - Mirco Dotta (Typesafe)

List(1,2,3).filter(x => x > 2) //> res: List[Int] = List(3)

Anonymous function Int => Boolean

List(1, 2, 3).filter( new Function[Int, Boolean] { def apply(x: Int): Boolean = x > 2 }) ///> res: List[Int] = List(3)

Functions are “just” objects

10/38

Sunday, May 26, 13

Page 12: Simplifying development-short - Mirco Dotta (Typesafe)

Everything is an expression

11/38

Sunday, May 26, 13

Page 13: Simplifying development-short - Mirco Dotta (Typesafe)

def max(x: Int, y: Int): Int = if (x > y) x else y

no return statement

val x: Int = { val y = 10 val z = 5 y + z}

blocks evaluate to last expression

12/38

Sunday, May 26, 13

Page 14: Simplifying development-short - Mirco Dotta (Typesafe)

Every operation is a method call

13/38

Sunday, May 26, 13

Page 15: Simplifying development-short - Mirco Dotta (Typesafe)

val x: Int = 10val y = x + 10

same as x.+(10)

14/38

Sunday, May 26, 13

Page 16: Simplifying development-short - Mirco Dotta (Typesafe)

Principles, not Rules

15/38

Sunday, May 26, 13

Page 17: Simplifying development-short - Mirco Dotta (Typesafe)

Users can write their own operators

16/38

Principle

Sunday, May 26, 13

Page 18: Simplifying development-short - Mirco Dotta (Typesafe)

class Complex(val re: Int, val im: Int = 0) { def +(that: Complex) = new Complex(this.re + that.re, this.im + that.im)

override def toString = s"$re + $im"}

val c1 = new Complex(1, 2) //> c1 : Complex = 1 + 2val c2 = new Complex(2, 2) //> c2 : Complex = 2 + 2val c = c1 + c2 //> c : Complex = 3 + 4

default argument

17/38

Sunday, May 26, 13

Page 19: Simplifying development-short - Mirco Dotta (Typesafe)

• new types can look like built-in ones

• “grow the language”

Sunday, May 26, 13

Page 20: Simplifying development-short - Mirco Dotta (Typesafe)

Powerful collections18/38

Sunday, May 26, 13

Page 21: Simplifying development-short - Mirco Dotta (Typesafe)

case class Time(hours: Int, minutes: Int = 0)

val times = List(Time(1), Time(2), Time(12,30), Time(16,15))

times.filter(time => time.hours >= 12) //> res: List[Time] = List(Time(12,30), Time(16,15))

times.map(time => Time(time.hours + 1, time.minutes)) //> res: List[Time] = List(Time(2,0), Time(3,0), Time(13,30), Time(17,15))

times.take(2) //> res: List[Time] = List(Time(1,0), Time(2,0))

times.groupBy(time => time.minutes) //> res: Map[Int,List[Time]] = Map(30 -> List(Time(12,30)), 15 -> List(Time(16,15)), 0 -> List(Time(1,0), Time(2,0)))

times.head //> res: Time = Time(1,0)times.last //> res: Time = Time(16,15)

19/38

Sunday, May 26, 13

Page 22: Simplifying development-short - Mirco Dotta (Typesafe)

For-comprehension

20/38

Sunday, May 26, 13

Page 23: Simplifying development-short - Mirco Dotta (Typesafe)

• More general than for-loops

• Used to iterate, filter, and generate new collections

21/38

Sunday, May 26, 13

Page 24: Simplifying development-short - Mirco Dotta (Typesafe)

for (p <- persons; pr <- p.projects; if pr.overdue) yield p.name

may have any number of generators

guard construct a new collection of the same type, element by element

p is in scope for other generators

22/38

Sunday, May 26, 13

Page 25: Simplifying development-short - Mirco Dotta (Typesafe)

times.filter(time => time.hours >= 12) //> res: List[Time] = List(Time(12,30), Time(16,15))

for(time <- times; if time.hours >= 12) yield time //>res: List[Time] = List(Time(12,30), Time(16,15))

times.map(time => Time(time.hours + 1, time.minutes)) //> res: List[Time] = List(Time(2,0), Time(3,0), Time(13,30), Time(17,15))

for(time <- times) yield Time(time.hours + 1, time.minutes) //> res: List[Time] = List(Time(2,0), Time(3,0), Time(13,30), Time(17,15))

23/38

Sunday, May 26, 13

Page 26: Simplifying development-short - Mirco Dotta (Typesafe)

Desugared to calls to filter, map, and flatMap

24/38

Sunday, May 26, 13

Page 27: Simplifying development-short - Mirco Dotta (Typesafe)

Readily available on any class implementing those methods!

25/38

Sunday, May 26, 13

Page 28: Simplifying development-short - Mirco Dotta (Typesafe)

Traits26/38

Sunday, May 26, 13

Page 29: Simplifying development-short - Mirco Dotta (Typesafe)

• Like Java interfaces, but traits

• can have behavior (like Java 8 interfaces with defender methods)

• can have state

• enable multiple inheritance

27/38

Sunday, May 26, 13

Page 30: Simplifying development-short - Mirco Dotta (Typesafe)

public interface Comparable<T> { int compareTo(int o);}

trait Comparable[T] { def compareTo(that: T): Int

}

def <(that: T): Boolean = (this compare that) < 0

def >(that: T): Boolean = (this compare that) > 0 //... Rich

Interface28/38

Sunday, May 26, 13

Page 31: Simplifying development-short - Mirco Dotta (Typesafe)

Multiple Inheritance

• Traits can mix-in multiple traits

• Classes can mix-in multiple traits

• Both Class and Trait can inherit at most from one Class

29/38

Sunday, May 26, 13

Page 32: Simplifying development-short - Mirco Dotta (Typesafe)

trait Bird { def fly: String = "I'm flying!"}

trait Swimmer { def swim: String = "I'm swimming!"}

class Fish extends Swimmer

class Duck extends Bird with Swimmer

30/38

Sunday, May 26, 13

Page 33: Simplifying development-short - Mirco Dotta (Typesafe)

Embedding DSLsSunday, May 26, 13

Page 34: Simplifying development-short - Mirco Dotta (Typesafe)

Scala simplifies development because...

32/38

Sunday, May 26, 13

Page 35: Simplifying development-short - Mirco Dotta (Typesafe)

Less is More

33/38

Sunday, May 26, 13

Page 36: Simplifying development-short - Mirco Dotta (Typesafe)

Few language constructs with high abstraction power

34/38

Sunday, May 26, 13

Page 37: Simplifying development-short - Mirco Dotta (Typesafe)

It’s Fun!

35/38

Sunday, May 26, 13

Page 38: Simplifying development-short - Mirco Dotta (Typesafe)

Good for your business?

36/38

Sunday, May 26, 13

Page 39: Simplifying development-short - Mirco Dotta (Typesafe)

37/38

Sunday, May 26, 13

Page 40: Simplifying development-short - Mirco Dotta (Typesafe)

Get Started in 5’38/38

http://www.typesafe.com/platform/getstarted

Sunday, May 26, 13

Page 41: Simplifying development-short - Mirco Dotta (Typesafe)

Thankstwitter: @mircodotta

Sunday, May 26, 13


Recommended