Slide 1

Slide 1 text

A 10 minutes introduction @fbessadok firas.bessadok.com

Slide 2

Slide 2 text

; !2

Slide 3

Slide 3 text

Martin Odersky EPFL 2003 !3 Scala

Slide 4

Slide 4 text

Scala • Object Oriented • Imperative/Functionnal Programming • Statically Typed • Compiles to bytecode • Executed on a JVM • Java Ecosystem !4

Slide 5

Slide 5 text

Variables val/var variableName: VariableType !5

Slide 6

Slide 6 text

Variables val/var variableName: VariableType var i: Int var capacite: Double val birthday: Date val ph: Double !6

Slide 7

Slide 7 text

Functions def function(param: Type): ReturnType = { blablabla blablabla } ! def function(param: Type): ReturnType = blabla ! (p1: Type, p2: Type): Type => blabla !7

Slide 8

Slide 8 text

def add(a: Int, b: Int): Int = { val c = a + b c } ! def move(dx: Int, dy: Int) { x = x + dx y = y + dy } !8 Functions

Slide 9

Slide 9 text

Tuple public Integer[] biskebiskerelle() { blablabla return tab; // contains exactly 2 integers } ! public Object[] biskebiskerage() { blablabla return tab; // contains exactly 1 integer, // 1 string and 1 date } !9

Slide 10

Slide 10 text

def biskebiskerelle(): (Int, Int) = { blablabla (3, 5) // contains exactly 2 integers } ! def biskebiskerage(): (Int, String, Date) = { blablabla (height, name, birthday) } !10 Tuple

Slide 11

Slide 11 text

Classes !11

Slide 12

Slide 12 text

Classes !12

Slide 13

Slide 13 text

Classes !13 class Car { private int year; private double km; ! public Car(int year) { this. year = year; km = 0; } public Car(int year, double km) { this.year = year; this.km = km; } ! public int getYear() { return year; } public double getKm() { return km; } public void setKm(double km) { this.km = km; } } class Car(val year: Int, var km: Double = 0)

Slide 14

Slide 14 text

Classes class Car(val year: Int, var km: Double = 0) !14

Slide 15

Slide 15 text

Classes !15 class Car { private int year; private double km; ! public Car(int year) { this.year = year; km = 0; } public Car(int year, double km) { this. year = year; this.km = km; } ! public int getYear() { return year; } public double getKm() { return km; } public void setKm(double km) { this.km = km; } } class Car(val year: Int, var km: Double = 0) ! val v1 = new Car(2013) val v2 = new Car(2013, 130000) ! ! ! class Car(val year: Int, var km: Double = 0) { ! val variable1: Type ! def function1(param: Type): Type = { blablabla } }

Slide 16

Slide 16 text

Scala OO !16

Slide 17

Slide 17 text

def add(a: Int, b: Int): Int = { val c = a + b c } !17

Slide 18

Slide 18 text

def add(a: Int, b: Int): Int = { val c = a + b c } ! def add(a: Int, b: Int): Int = { a + b } !18

Slide 19

Slide 19 text

def add(a: Int, b: Int): Int = { val c = a + b c } ! def add(a: Int, b: Int): Int = { a + b } ! def add(a: Int, b: Int): Int = a + b !19

Slide 20

Slide 20 text

def add(a: Int, b: Int): Int = a + b !20

Slide 21

Slide 21 text

def add(a: Int, b: Int): Int = a + b ! def min(a: Int, b: Int): Int = a - b ! def mul(a: Int, b: Int): Int = a * b !21

Slide 22

Slide 22 text

def add(a: Int, b: Int): Int = a + b ! def min(a: Int, b: Int): Int = a - b ! def mul(a: Int, b: Int): Int = a * b ! (Int, Int) => Int !22

Slide 23

Slide 23 text

def add(a: Int, b: Int): Int = a + b ! def min(a: Int, b: Int): Int = a - b ! def mul(a: Int, b: Int): Int = a * b ! def maths(a: Int, b: Int, f: (Int, Int) => Int): Int = f(a,b) !23

Slide 24

Slide 24 text

def maths(a: Int, b: Int, f: (Int, Int) => Int): Int = f(a,b) !24

Slide 25

Slide 25 text

def maths(a: Int, b: Int, f: (Int, Int) => Int): Int = f(a,b) ! maths(5, 6, add) ! maths(25, 26, min) ! maths(45, 46, mul) ! maths(65, 66, (a: Int, b, Int) => a+b+10) !25

Slide 26

Slide 26 text

maths(65, 66, (a: Int, b, Int) => a+b+10) !26

Slide 27

Slide 27 text

maths(65, 66, (a: Int, b, Int) => a+b+10) ! maths(65, 66, _ + _ + 10) !27

Slide 28

Slide 28 text

maths(65, 66, (a: Int, b, Int) => a+b+10) ! maths(65, 66, _ + _ + 10) ! maths(5, 6, _ + _) ! maths(25, 26, _ - _) ! maths(45, 46, _ * _) !28

Slide 29

Slide 29 text

Pattern Matching x match { case 1 => « one » case 2 => « two » case _ => « many » } !29

Slide 30

Slide 30 text

Pattern Matching x match { case 1 => « one » case 2 => « two » case a: Int if(a > 2) => « many » } !30

Slide 31

Slide 31 text

Pattern Matching x match { case a: Int => « integer » case a: Double => « double » case a: String => « string » } !31

Slide 32

Slide 32 text

Pattern Matching x match { case Car(a, km) => « car. year » + a case Number(n) => « number » + n case a: String => « string » } !32

Slide 33

Slide 33 text

Pattern Matching x match { case Car(a, km) if (km > 0) => « car. year » + a case Car(a, km) if (km == 0) => « new is always better » } !33

Slide 34

Slide 34 text

Lists val myList = List(6, 1, 3 ,2, 9) ! myList.min!! ! // 1 myList.max! ! // 9 myList.sorted!! // List(1, 2, 3, 6, 9) myList.head! ! // 6 myList.tail! ! ! // List(1, 3, 2, 9) myList.last!! ! // 9 myList.init! ! ! // List(6, 1, 3, 2) !34

Slide 35

Slide 35 text

Lists val myList = List(6, 1, 3 ,2, 9) ! myList.map(x => x*2)! // List(12,2,6,4,18) !35

Slide 36

Slide 36 text

Lists val myList = List(6, 1, 3 ,2, 9) ! myList.map(x => x*2)! // List(12,2,6,4,18) ! val myCoord = List((48.861013, 2.335871), (l1,l2)) ! myCoord.map((lat,lng) => gmap.getAddress(lat, lng)) !36

Slide 37

Slide 37 text

Lists val myList = List(6, 1, 3 ,2, 9) ! myList.map(_*2)!! // List(12,2,6,4,18) myList.filter(_>3)! // List(6,9) ! 4 :: myList // List(4,6,1,3,2,9) 4 +: myList // List(4,6,1,3,2,9) myList :+ 4 // List(6,1,3,2,9,4) !37

Slide 38

Slide 38 text

Lists & Pattern matching myList match { case List() => « empty » case x :: List() => « one element » case x :: y :: List() => « two elements » case x :: xs => « many elements » } !38

Slide 39

Slide 39 text

Scala http://www.scala-lang.org/ http://www.scala-lang.org/api/current/ http://www.scalatutorials.com/ ! https://www.coursera.org/course/progfun !39