Download - Scala - jazyk budoucnosti
SCALA Scalable language
About.me/byF
About.me/byF
Basic → Pascal → JavaScript → C/C++ → PHP → Java → Scala
Scala je nechvalně proslulá jako složitý jazyk.
"Útes šílenství"
Scala jednoduše řeší složité problémy!
"If I were to pick a language to use today other than Java, it would be Scala." James Gosling
Scala a Java
téměř 100% kompatibilní
JVM ekosystém
Kdo používá Scalu?
Kdo používá Scalu?
@byFcz
Velmi, velmi základní syntaxe
val msg = "ScalaFTW!"
Scala má pokročilou type inference!
Velmi, velmi základní syntaxe
val msg: String = "ScalaFTW!"
Scala má semi-colon inference!
Velmi, velmi základní syntaxe
def msg = "ScalaFTW!"
Velmi, velmi základní syntaxe
def msg(): String = { return "ScalaFTW!"}
Scala má úspornou, flexibilní syntaxi!
Scala je čistě objektový jazyk
1 + 2
Scala je čistě objektový jazyk
(1).+(2)
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;
}
}
Definice třídy ve Scale
class Person(var name: String)
Singleton v Javě
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() { }
public static Singleton getInstance() {
return instance;
}
}
Singleton ve Scale
object Singleton
Scala je funkcionální jazyk
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));
}
Kolekce funkcionálně
val x = Array(1,2,3,4,5,6)
val res = x filter ( _ % 2 == 1 )
Kolekce funkcionálně
val (odds,evens) = x partition(_% 2 == 1)
Kolekce funkcionálně
val str = x mkString
Kolekce funkcionálně
val str = x mkString("Start: ",",","!")
Scala je HYBRID!
Case classes
case class Person(name: String,surname: String)
Pattern matching
selektor match {
vzor => výraz(y)
jinyVzor => výraz(y)
}
Switch v Javě
public boolean doSwitch(int n) {
switch(n) {
case 1: return true;
default: return false;
}
}
Alternativa switche ve Scale
def doSwitch(n:Integer) = n match {
case 1 => true
case _ => false
}
Case classes
case class Person(name: String,surname: String)
Pattern matching v akci
val audience = List[Person](...)
/* To jste VY! */
val enthusiasts = audience filter {
case _ => false
}
Pattern matching v akci
val enthusiasts = audience filter {
case Person("Karel","Smutný") => true
case _ => false
}
Pattern matching v akci
val enthusiasts = audience filter {
case Person("Karel","Smutný") => true
case Person("Jan",_) => true
case _ => false
}
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
}
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
}
Podpora XML
val elem = <xml></xml>
Podpora XML
val elem = <xml>{foo}</xml>
Podpora XML
<xml>scala</xml>.text
Podpora XML
<a><b>hello</b></a> \ "b"
Více jader, ...
... 80 jader!
Kolekce paralelně
val kolekce = for {
s <- surnames //mujan
n <- names //jan
if s endsWith n
} yield n + " " + s
Kolekce paralelně
val kolekce = for {
s <- surnames.par
n <- names.par
if s endsWith n
} yield n + " " + s
Paralelní programování „klasicky“
Sdílení dat & zámky
Paralelní programování „klasicky“
Deadlocks & race conditions
Actor model
„Make send, not share.“
Actor model
class Announcer extends Actor {
def receive = {
case s: String => println(s)
case _ => println("Ignored!")
}
}
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()
Actor model
Fault tolerance → Self-Healing
Teď trochu distribuovaně…
RMI, Corba, EJB, SOAP, XML-RPC, Thrift
Teď trochu distribuovaně…
„It‘s time for RPC to retire!“
Steve Vinoski
Akka 2.0
Úplně všichni aktoři jsou distribuovaní!
Akka 2.0
Naprogramovali jste actor-based aplikaci.
Akka 2.0
Přidáte další stroj a zapnete v konfiguraci cluster.
Scala je elegantní jazyk se stručnou syntaxí, který umožňuje jednoduše
řešit složité problémy.
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
Czech Scala Enthusiasts http://www.meetup.com/czech-scala-enthusiasts/