SCALAScalable language
About.me/byF
About.me/byFBasic → 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 todayother than Java, it would be Scala."                               James Gosling
Scala a Javaté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í syntaxeval msg: String = "ScalaFTW!"
Scala má semi-colon inference!
Velmi, velmi základní syntaxe     def msg = "ScalaFTW!"
Velmi, velmi základní syntaxedef 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);    ...
Definice třídy ve Scaleclass Person(var name: String)
Singleton v Javěpublic class Singleton {    private static final Singleton instance = new Singleton();    private Singleto...
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(...
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 classescase class Person(name: String,surname: String)
Pattern matchingselektor 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 Scaledef doSwitch(n:Integer) = n match {  case 1 => true  case _ => false}
Case classescase class Person(name: String,surname: String)
Pattern matching v akcival audience = List[Person](...)         /* To jste VY! */val enthusiasts = audience filter {  case...
Pattern matching v akcival enthusiasts = audience filter {  case Person("Karel","Smutný") => true  case _ => false}
Pattern matching v akcival enthusiasts = audience filter {  case Person("Karel","Smutný") => true  case Person("Jan",_) =>...
Pattern matching v akcival enthusiasts = audience filter {  case Person("Karel","Smutný") => true  case Person("Jan",_) =>...
Pattern matching v akcival enthusiasts = audience filter {  case Person("Karel","Smutný") => true  case Person("Jan",_) =>...
Podpora XMLval elem = <xml></xml>
Podpora XMLval 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 modelclass Announcer extends Actor {  def receive = {     case s: String => println(s)     case _ => println("Ignore...
Actor modelval zf = Actor.actorOf[Announcer].start()zf ! "Super" //Actor vypíše Superzf ! 5 //Actor ignoruje zprávuval a =...
Actor modelFault 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.0Naprogramovali jste actor-based          aplikaci.
Akka 2.0Přidáte další stroj a zapnete v      konfiguraci cluster.
Scala je elegantní jazyk se stručnousyntaxí, 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 w...
Czech Scala Enthusiastshttp://www.meetup.com/czech-scala-enthusiasts/
Scala - jazyk budoucnosti
Scala - jazyk budoucnosti
Scala - jazyk budoucnosti
Scala - jazyk budoucnosti
Scala - jazyk budoucnosti
Upcoming SlideShare
Loading in …5
×

Scala - jazyk budoucnosti

3,084 views

Published on

Talk about Scala I gave at WebExpo 2011 in Prague.

Published in: Technology
2 Comments
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
3,084
On SlideShare
0
From Embeds
0
Number of Embeds
725
Actions
Shares
0
Downloads
14
Comments
2
Likes
0
Embeds 0
No embeds

No notes for slide

Scala - jazyk budoucnosti

  1. 1. SCALAScalable language
  2. 2. About.me/byF
  3. 3. About.me/byFBasic → Pascal → JavaScript → C/C++ → PHP → Java → Scala
  4. 4. Scala je nechvalně proslulá jako složitý jazyk.
  5. 5. "Útes šílenství"
  6. 6. Scala jednoduše řeší složité problémy!
  7. 7. "If I were to pick a language to use todayother than Java, it would be Scala." James Gosling
  8. 8. Scala a Javatéměř 100% kompatibilní JVM ekosystém
  9. 9. Kdo používá Scalu?
  10. 10. Kdo používá Scalu? @byFcz
  11. 11. Velmi, velmi základní syntaxe val msg = "ScalaFTW!"
  12. 12. Scala má pokročilou type inference!
  13. 13. Velmi, velmi základní syntaxeval msg: String = "ScalaFTW!"
  14. 14. Scala má semi-colon inference!
  15. 15. Velmi, velmi základní syntaxe def msg = "ScalaFTW!"
  16. 16. Velmi, velmi základní syntaxedef msg(): String = { return "ScalaFTW!"}
  17. 17. Scala má úspornou, flexibilní syntaxi!
  18. 18. Scala je čistě objektový jazyk 1+2
  19. 19. Scala je čistě objektový jazyk (1).+(2)
  20. 20. 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; }}
  21. 21. Definice třídy ve Scaleclass Person(var name: String)
  22. 22. Singleton v Javěpublic class Singleton { private static final Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance() { return instance; }}
  23. 23. Singleton ve Scale object Singleton
  24. 24. Scala je funkcionální jazyk
  25. 25. 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));}
  26. 26. Kolekce funkcionálněval x = Array(1,2,3,4,5,6)val res = x filter ( _ % 2 == 1 )
  27. 27. Kolekce funkcionálněval (odds,evens) = x partition(_% 2 == 1)
  28. 28. Kolekce funkcionálněval str = x mkString
  29. 29. Kolekce funkcionálněval str = x mkString("Start: ",",","!")
  30. 30. Scala je HYBRID!
  31. 31. Case classescase class Person(name: String,surname: String)
  32. 32. Pattern matchingselektor match { vzor => výraz(y) jinyVzor => výraz(y)}
  33. 33. Switch v Javěpublic boolean doSwitch(int n) { switch(n) { case 1: return true; default: return false;}}
  34. 34. Alternativa switche ve Scaledef doSwitch(n:Integer) = n match { case 1 => true case _ => false}
  35. 35. Case classescase class Person(name: String,surname: String)
  36. 36. Pattern matching v akcival audience = List[Person](...) /* To jste VY! */val enthusiasts = audience filter { case _ => false}
  37. 37. Pattern matching v akcival enthusiasts = audience filter { case Person("Karel","Smutný") => true case _ => false}
  38. 38. Pattern matching v akcival enthusiasts = audience filter { case Person("Karel","Smutný") => true case Person("Jan",_) => true case _ => false}
  39. 39. Pattern matching v akcival enthusiasts = audience filter { case Person("Karel","Smutný") => true case Person("Jan",_) => true case Person("Tomas",sur) => println(sur) true case _ => false}
  40. 40. Pattern matching v akcival 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}
  41. 41. Podpora XMLval elem = <xml></xml>
  42. 42. Podpora XMLval elem = <xml>{foo}</xml>
  43. 43. Podpora XML<xml>scala</xml>.text
  44. 44. Podpora XML<a><b>hello</b></a> "b"
  45. 45. Více jader, ...
  46. 46. ... 80 jader!
  47. 47. Kolekce paralelněval kolekce = for { s <- surnames //mujan n <- names //jan if s endsWith n} yield n + " " + s
  48. 48. Kolekce paralelněval kolekce = for { s <- surnames.par n <- names.par if s endsWith n} yield n + " " + s
  49. 49. Paralelní programování „klasicky“ Sdílení dat & zámky
  50. 50. Paralelní programování „klasicky“ Deadlocks & race conditions
  51. 51. Actor model„Make send, not share.“
  52. 52. Actor modelclass Announcer extends Actor { def receive = { case s: String => println(s) case _ => println("Ignored!") }}
  53. 53. Actor modelval zf = Actor.actorOf[Announcer].start()zf ! "Super" //Actor vypíše Superzf ! 5 //Actor ignoruje zprávuval a = Actor.actorOf[Announcer].start()val b = Actor.actorOf[Announcer].start()val c = Actor.actorOf[Announcer].start()
  54. 54. Actor modelFault tolerance → Self-Healing
  55. 55. Teď trochu distribuovaně…RMI, Corba, EJB, SOAP, XML-RPC, Thrift
  56. 56. Teď trochu distribuovaně…„It‘s time for RPC to retire!“ Steve Vinoski
  57. 57. Akka 2.0Úplně všichni aktoři jsou distribuovaní!
  58. 58. Akka 2.0Naprogramovali jste actor-based aplikaci.
  59. 59. Akka 2.0Přidáte další stroj a zapnete v konfiguraci cluster.
  60. 60. Scala je elegantní jazyk se stručnousyntaxí, který umožňuje jednoduše řešit složité problémy.
  61. 61. 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
  62. 62. Czech Scala Enthusiastshttp://www.meetup.com/czech-scala-enthusiasts/

×