scala is better than java!

99
 Scala, un Java migliore introduzione al linguaggio che rende più efficace la programmazione.

Upload: luca-marrocco

Post on 10-May-2015

2.903 views

Category:

Technology


4 download

DESCRIPTION

scala is a language that mix functional and object oriented programming. It allow you to use both declarative and programmatic style of programming. In this presentation I show an introduction of key principles that driven scala implementation. With some simple example i will show you some scala tools to became a more proficient programmer.

TRANSCRIPT

Page 1: Scala is better than java!

   

Scala, un Java miglioreintroduzione al linguaggio che rende

più efficace la programmazione.

Page 2: Scala is better than java!

   

Scalable Language

Page 3: Scala is better than java!

   

Object Oriented

Page 4: Scala is better than java!

   

Object Oriented Pure

Page 5: Scala is better than java!

   

Functional

Page 6: Scala is better than java!

   

Java Virtual Machine

Page 7: Scala is better than java!

   

println(1 * 2)

val numbers = List(1, 2, 3)

numbers.foreach(n => println(n))

Page 8: Scala is better than java!

   

$ scala

scala> println(1 * 2)

2

scala> var numbers = List(1, 2, 3)

scala> numbers.foreach(n => println(n))

1

2

3

Page 9: Scala is better than java!

   

Scala conventions

Page 10: Scala is better than java!

   

return is “almost” optional

Page 11: Scala is better than java!

   

def sum(a: Int, b: Int) = return a + b

Page 12: Scala is better than java!

   

scala> def sum(a: Int, b: Int) = a + b

scala> println(sum(1, 2))

3

Page 13: Scala is better than java!

   

; is optional

Page 14: Scala is better than java!

   

def sum(a: Int, b:Int) = {

println(a);

println(b);

a + b;

}

Page 15: Scala is better than java!

   

Type inference

Page 16: Scala is better than java!

   

Scala is strongly typed

Page 17: Scala is better than java!

   

Type is inferred by scala

Page 18: Scala is better than java!

   

Type definition is “almost” optional

Page 19: Scala is better than java!

   

val a:Int = 1

Page 20: Scala is better than java!

   

def funz(a:Int) = 1

Page 21: Scala is better than java!

   

def funz(a: Int):Int = 1

Page 22: Scala is better than java!

   

Operator Overloading

Page 23: Scala is better than java!

   

Scala hasn't operators

Page 24: Scala is better than java!

   

Operators are object's functions

Page 25: Scala is better than java!

   

+ - * / are valid function names

Page 26: Scala is better than java!

   

Lenient invocation syntax

Page 27: Scala is better than java!

   

object.method(object)

object method object

Page 28: Scala is better than java!

   

object.+(object)

object + object

Page 29: Scala is better than java!

   

1.+(1)

1 + 1

Page 30: Scala is better than java!

   

Operator precedence?

Page 31: Scala is better than java!

   

1.+(1).+(2).*(2) == 8

Page 32: Scala is better than java!

   

1.+(1).+(2).*(2) == 6

Page 33: Scala is better than java!

   

Immutability rocks

Page 34: Scala is better than java!

   

Value vs Variable

Page 35: Scala is better than java!

   

A value is immutable

Page 36: Scala is better than java!

   

A variable is mutable

Page 37: Scala is better than java!

   

var a = 1

a = 2 // ok

Page 38: Scala is better than java!

   

val a = 1

a = 2 // error: reassignment to val

Page 39: Scala is better than java!

   

scala val ~= java final attribute

Page 40: Scala is better than java!

   

classes

Page 41: Scala is better than java!

   

public class Car {

private int milesDriven;

private final int age;

public Car(int age) { this.age = age; }

public void driveFor(int distance) {

milesDriven += distance;

}

public int getAge() { return age; }

public int getMiles() { return miles; }

}

Page 42: Scala is better than java!

   

class Car(val age:Int) {

private var milesDriven = 0

def driveFor(distance:Int) = milesDriven += distance

def miles = milesDriven

}

Page 43: Scala is better than java!

   

val car = new Car(2010)

car driveFor 100

println(car.age)

println(car.miles)

Page 44: Scala is better than java!

   

Class constructor?

Page 45: Scala is better than java!

   

Class costructor is class body itself!

Page 46: Scala is better than java!

   

class Person(name:String) {

var age = 0

println(name)

}

Page 47: Scala is better than java!

   

Costructors override

Page 48: Scala is better than java!

   

class Person(name:String) {

var age = 0

def this(name:String, anAge:Int) {

this(name)

age = anAge

}

}

Page 49: Scala is better than java!

   

Map

Page 50: Scala is better than java!

   

val map = Map(

“key1” -> “value2”,

“key2” -> “value2”

)

map(“key1”)

map(“key2”)

Page 51: Scala is better than java!

   

List

Page 52: Scala is better than java!

   

val list = List(1, 2, 3)

list.foreach(i => println(i))

Page 53: Scala is better than java!

   

Mutable vs Immutable Collections

Page 54: Scala is better than java!

   

:: is concatenate operator

Page 55: Scala is better than java!

   

val L = List()

val L1 = 3 :: L

val L2 = 1 :: 2 :: L1

Page 56: Scala is better than java!

   

When you want exactly one object

Page 57: Scala is better than java!

   

Many way to make singleton in java

Page 58: Scala is better than java!

   

Java Singleton simple way

Page 59: Scala is better than java!

   

class App {

private static final App instance;

public static final App getInstance() {

if(instance == null) {

instance = new App();

}

return instance;

}

}

Page 60: Scala is better than java!

   

Scala hasn't static

Page 61: Scala is better than java!

   

because Scala is object oriented

Page 62: Scala is better than java!

   

Scala allow you to define object

Page 63: Scala is better than java!

   

object App {

def doSomething() = ...

}

App.doSomething()

Page 64: Scala is better than java!

   

Object and class work togheter

Page 65: Scala is better than java!

   

class Color(name:String)

object Color {

private val colors = Map(

“red” -> new Color(“red”),

“green” -> new Color(“green”),

“blue” -> new Color(“blue”),

)

def mk(name:String) = colors(name)

}

Page 66: Scala is better than java!

   

val red = Color.mk(“red”)

var green = Color.mk(“green”)

Page 67: Scala is better than java!

   

val red = Color(“red”)

?

Page 68: Scala is better than java!

   

object Color {

...

def apply(name:String) = colors(name)

}

val red = Color(“red”)

Page 69: Scala is better than java!

   

Pattern Matching

Page 70: Scala is better than java!

   

switch(poor) {

case 1:

doSomething();

break;

case 2:

doSomethingElse();

break;

default:

inOtherCases();

}

Page 71: Scala is better than java!

   

Scala match is powerfull

Page 72: Scala is better than java!

   

def activity(day: String) {

day match {

case “sunday” => println(“sleep”)

case _ => println(“code”)

}

}

List(“monday”, “sunday”).foreach { activity }

Page 73: Scala is better than java!

   

can match int, string..

Page 74: Scala is better than java!

   

can match list!

Page 75: Scala is better than java!

   

List(1, 2) match {

case List(2, 1) => println(“!match”)

case List(1, 2) => println(“match!”)

}

Page 76: Scala is better than java!

   

can match case class!

Page 77: Scala is better than java!

   

case class?

Page 78: Scala is better than java!

   

are special classes

used in pattern matching

Page 79: Scala is better than java!

   

case class Color(name:String)

new Color(“red”)

Page 80: Scala is better than java!

   

case class Red extends Color(“red”)

case class Blue extends Color(“blue”)

def brush(color:Color) {

color match {

case Red() => print(“fire”)

case Blue() => print(“water”)

}

}

brush(Red())

Page 81: Scala is better than java!

   

extract matching values

Page 82: Scala is better than java!

   

case class Color(name:String)

val red = Color(“red”)

red match {

case Color(name) => println(name)

}

Page 83: Scala is better than java!

   

case class Color(name:String)

val red = Color(“red”)

red match {

case Color(name) => println(name)

}

Page 84: Scala is better than java!

   

case class Color(name:String)

val red = Color(“red”)

red match {

case Color(name) => println(name)

}

Page 85: Scala is better than java!

   

First class function

Page 86: Scala is better than java!

   

def f1(x) → x

def f2(x) → x * 2

def g(f, x) → f(x) + 1

g(f1, 3) → f1(3) + 1 → 4

g(f2, 3) → f2(3) + 1 → 7

Page 87: Scala is better than java!

   

def f1(x: Int) = x

def f2(x: Int) = x * 2

def g(f:Int=>Int, x:Int) = f(x) + 1

g(f1, 3) → f1(3) + 1 → 4

g(f2, 3) → f2(3) + 1 → 7

Page 88: Scala is better than java!

   

First class function over collections

Page 89: Scala is better than java!

   

def m2(i:Int) = i * 2

def p2(i:Int) = i * i

List(1, 2, 3).map(m2)

List(1, 2, 3).map(p2)

Page 90: Scala is better than java!

   

List(1, 2, 3).map(i => i * 2)

List(1, 2, 3).map(i => i * i)

Page 91: Scala is better than java!

   

List(1, 2, 3).filter(i => i % 2 == 0)

List(1, 2, 3).filter(i => i < 3)

Page 92: Scala is better than java!

   

Around method Pattern

Page 93: Scala is better than java!

   

try {

doSomething();

}

finally {

cleanup();

}

Page 94: Scala is better than java!

   

Too many open files!?

Page 95: Scala is better than java!

   

def write(path:String)(block: PrintWriter =>Unit) = {

val out = new PrintWriter(new File(path))

try {

block(out)

}

finally {

out.close

}

}

Page 96: Scala is better than java!

   

write(“/tmp/output”) {

out => out write “scala rocks!”

}

Page 97: Scala is better than java!

   

while(i < 100000) write(“/tmp/output”) {

out => out write “scala rocks!”

}

Be carefull, don't try this at home!

Page 98: Scala is better than java!

   

www.scala-lang.org

Page 99: Scala is better than java!

   

Luca [email protected]

twitter.com/lucamarrocco

Giovanni Di [email protected]

twitter.com/pino_otto