67
SCALA Scalable language

Scala - jazyk budoucnosti

Embed Size (px)

DESCRIPTION

Talk about Scala I gave at WebExpo 2011 in Prague.

Citation preview

Page 1: Scala - jazyk budoucnosti

SCALA Scalable language

Page 2: Scala - jazyk budoucnosti

About.me/byF

Page 3: Scala - jazyk budoucnosti

About.me/byF

Basic → Pascal → JavaScript → C/C++ → PHP → Java → Scala

Page 4: Scala - jazyk budoucnosti

Scala je nechvalně proslulá jako složitý jazyk.

Page 5: Scala - jazyk budoucnosti

"Útes šílenství"

Page 6: Scala - jazyk budoucnosti

Scala jednoduše řeší složité problémy!

Page 7: Scala - jazyk budoucnosti

"If I were to pick a language to use today other than Java, it would be Scala." James Gosling

Page 8: Scala - jazyk budoucnosti

Scala a Java

téměř 100% kompatibilní

JVM ekosystém

Page 9: Scala - jazyk budoucnosti

Kdo používá Scalu?

Page 10: Scala - jazyk budoucnosti

Kdo používá Scalu?

@byFcz

Page 11: Scala - jazyk budoucnosti

Velmi, velmi základní syntaxe

val msg = "ScalaFTW!"

Page 12: Scala - jazyk budoucnosti

Scala má pokročilou type inference!

Page 13: Scala - jazyk budoucnosti

Velmi, velmi základní syntaxe

val msg: String = "ScalaFTW!"

Page 14: Scala - jazyk budoucnosti

Scala má semi-colon inference!

Page 15: Scala - jazyk budoucnosti

Velmi, velmi základní syntaxe

def msg = "ScalaFTW!"

Page 16: Scala - jazyk budoucnosti

Velmi, velmi základní syntaxe

def msg(): String = { return "ScalaFTW!"}

Page 17: Scala - jazyk budoucnosti

Scala má úspornou, flexibilní syntaxi!

Page 18: Scala - jazyk budoucnosti

Scala je čistě objektový jazyk

1 + 2

Page 19: Scala - jazyk budoucnosti

Scala je čistě objektový jazyk

(1).+(2)

Page 20: Scala - jazyk budoucnosti

Definice třídy v Javě

class Person {

private String name;

public Person(String name) {

this.setName(name);

}

public void getName() {

return this.name;

}

public String setName(String name) {

this.name = name;

}

}

Page 21: Scala - jazyk budoucnosti

Definice třídy ve Scale

class Person(var name: String)

Page 22: Scala - jazyk budoucnosti

Singleton v Javě

public class Singleton {

private static final Singleton instance = new Singleton();

private Singleton() { }

public static Singleton getInstance() {

return instance;

}

}

Page 23: Scala - jazyk budoucnosti

Singleton ve Scale

object Singleton

Page 24: Scala - jazyk budoucnosti

Scala je funkcionální jazyk

Page 25: Scala - jazyk budoucnosti

Kolekce funkcionálně

int[] x = {1,2,3,4,5,6}

ArrayList res = new ArrayList();

for (int v : x) {

if (v % 2 == 1)

res.add(new Integer(v));

}

Page 26: Scala - jazyk budoucnosti

Kolekce funkcionálně

val x = Array(1,2,3,4,5,6)

val res = x filter ( _ % 2 == 1 )

Page 27: Scala - jazyk budoucnosti

Kolekce funkcionálně

val (odds,evens) = x partition(_% 2 == 1)

Page 28: Scala - jazyk budoucnosti

Kolekce funkcionálně

val str = x mkString

Page 29: Scala - jazyk budoucnosti

Kolekce funkcionálně

val str = x mkString("Start: ",",","!")

Page 30: Scala - jazyk budoucnosti

Scala je HYBRID!

Page 31: Scala - jazyk budoucnosti

Case classes

case class Person(name: String,surname: String)

Page 32: Scala - jazyk budoucnosti

Pattern matching

selektor match {

vzor => výraz(y)

jinyVzor => výraz(y)

}

Page 33: Scala - jazyk budoucnosti

Switch v Javě

public boolean doSwitch(int n) {

switch(n) {

case 1: return true;

default: return false;

}

}

Page 34: Scala - jazyk budoucnosti

Alternativa switche ve Scale

def doSwitch(n:Integer) = n match {

case 1 => true

case _ => false

}

Page 35: Scala - jazyk budoucnosti

Case classes

case class Person(name: String,surname: String)

Page 36: Scala - jazyk budoucnosti

Pattern matching v akci

val audience = List[Person](...)

/* To jste VY! */

val enthusiasts = audience filter {

case _ => false

}

Page 37: Scala - jazyk budoucnosti

Pattern matching v akci

val enthusiasts = audience filter {

case Person("Karel","Smutný") => true

case _ => false

}

Page 38: Scala - jazyk budoucnosti

Pattern matching v akci

val enthusiasts = audience filter {

case Person("Karel","Smutný") => true

case Person("Jan",_) => true

case _ => false

}

Page 39: Scala - jazyk budoucnosti

Pattern matching v akci

val enthusiasts = audience filter {

case Person("Karel","Smutný") => true

case Person("Jan",_) => true

case Person("Tomas",sur) =>

println(sur)

true

case _ => false

}

Page 40: Scala - jazyk budoucnosti

Pattern matching v akci

val enthusiasts = audience filter {

case Person("Karel","Smutný") => true

case Person("Jan",_) => true

case Person("Tomas",sur) =>

println(sur)

true

case Person(name,sur) => true

case _ => false

}

Page 41: Scala - jazyk budoucnosti
Page 42: Scala - jazyk budoucnosti

Podpora XML

val elem = <xml></xml>

Page 43: Scala - jazyk budoucnosti

Podpora XML

val elem = <xml>{foo}</xml>

Page 44: Scala - jazyk budoucnosti

Podpora XML

<xml>scala</xml>.text

Page 45: Scala - jazyk budoucnosti

Podpora XML

<a><b>hello</b></a> \ "b"

Page 46: Scala - jazyk budoucnosti

Více jader, ...

Page 47: Scala - jazyk budoucnosti

... 80 jader!

Page 48: Scala - jazyk budoucnosti
Page 49: Scala - jazyk budoucnosti

Kolekce paralelně

val kolekce = for {

s <- surnames //mujan

n <- names //jan

if s endsWith n

} yield n + " " + s

Page 50: Scala - jazyk budoucnosti

Kolekce paralelně

val kolekce = for {

s <- surnames.par

n <- names.par

if s endsWith n

} yield n + " " + s

Page 51: Scala - jazyk budoucnosti
Page 52: Scala - jazyk budoucnosti

Paralelní programování „klasicky“

Sdílení dat & zámky

Page 53: Scala - jazyk budoucnosti

Paralelní programování „klasicky“

Deadlocks & race conditions

Page 54: Scala - jazyk budoucnosti
Page 55: Scala - jazyk budoucnosti

Actor model

„Make send, not share.“

Page 56: Scala - jazyk budoucnosti

Actor model

class Announcer extends Actor {

def receive = {

case s: String => println(s)

case _ => println("Ignored!")

}

}

Page 57: Scala - jazyk budoucnosti

Actor model

val zf = Actor.actorOf[Announcer].start()

zf ! "Super" //Actor vypíše Super

zf ! 5 //Actor ignoruje zprávu

val a = Actor.actorOf[Announcer].start()

val b = Actor.actorOf[Announcer].start()

val c = Actor.actorOf[Announcer].start()

Page 58: Scala - jazyk budoucnosti

Actor model

Fault tolerance → Self-Healing

Page 59: Scala - jazyk budoucnosti

Teď trochu distribuovaně…

RMI, Corba, EJB, SOAP, XML-RPC, Thrift

Page 60: Scala - jazyk budoucnosti

Teď trochu distribuovaně…

„It‘s time for RPC to retire!“

Steve Vinoski

Page 61: Scala - jazyk budoucnosti

Akka 2.0

Úplně všichni aktoři jsou distribuovaní!

Page 62: Scala - jazyk budoucnosti
Page 63: Scala - jazyk budoucnosti

Akka 2.0

Naprogramovali jste actor-based aplikaci.

Page 64: Scala - jazyk budoucnosti

Akka 2.0

Přidáte další stroj a zapnete v konfiguraci cluster.

Page 65: Scala - jazyk budoucnosti

Scala je elegantní jazyk se stručnou syntaxí, který umožňuje jednoduše

řešit složité problémy.

Page 66: Scala - jazyk budoucnosti

Literatura

• Programming in Scala, Second Edition http://www.artima.com/shop/programming_in_scala_2ed

• Dokumentace na webu Scaly http://www.scala-lang.org/node/197

Page 67: Scala - jazyk budoucnosti

Czech Scala Enthusiasts http://www.meetup.com/czech-scala-enthusiasts/