Einführung   in Scala SDC 2011 - Seitenbau Konstanz Christian Baranowski Dennis Braunsdorf
Was ist Scala?
Scala  a Scalable  Language
Scala  Bazaar  Scala = Bazaar Java = Cathedral “ The Cathedral and the Bazaar” - Eric S. Raymond
Warum Scala?
Scala ist objekt-orientiert
Everything is a Object
Scala ist funktional
Scala ist statisch typisiert
Scala Basics
Variablen var  msg =  "Hello SDC!" // Java Code String  msg  =  "Hello World" ; val  msg =  "Hell...
Funktionen def  max(x : Int, y : Int) : Int = { if (x > y) { return  x; } else  { return  y; } }
Funktionen def  max(x : Int, y : Int) : Int = { if (x > y) { x } else  { y } }
Funktionen def  max(x : Int, y : Int) : Int = { if (x > y) x else  y }
Funktionen def  max(x : Int, y : Int) = { if (x > y) x else  y }
Procedure def  printer(msg : String) { ... }
Funktionen Composition and Scoping def  max(x : Int, y : Int) = { def  xGreater() = { x > y  } if (xGreater()) x else  y }
Funktionen Composition and Scoping def  max(x : Int, y : Int) = { def  xGreater() = { x > y  } if (xGreater) x else  y }
Functions are objects def  oncePerSecond(callback: () => Unit) { while  ( true ) { callback(); Thread sleep 1000 } } def  ...
Anonymous Functions def  oncePerSecond(callback: () => Unit) { while  ( true ) { callback(); Thread sleep 1000 } } oncePer...
Arrays val  names =  new  Array[String](2) names(0) =  "Dennis" names(1) =  "Christian"
Arrays val  names = Array( "Dennis" ,  "Christian" )
Arrays val  names = Array( "Dennis" ,  "Christian" ,  true , 0, 1.5) val  names : Array[Any]  = Array(...
Listen val  oneTwo = List(1, 2) val  threeFour = List(3, 4) val  oneTwoThreeFour = oneTwo ::: threeFour val  oneTwoThree =...
Tuples val  dennis = (1,  "Dennis" ) val  christian = (2,  "Christian" ) val  dennis = ( "Dennis&...
Sets
Sets import  scala.collection.mutable.HashSet val  jetSet =  new  HashSet[String] jetSet +=  "Lear" jetSet += ( ...
Sets val  jetSet = Set( "AirBus" ) jetSet: scala.collection.immutable.Set[java.lang.String]
Maps
Maps import  scala.collection.mutable.HashMap val  treasureMap =  new  HashMap[Int, String] treasureMap += 1 ->  "Go ...
Maps val  treasureMap = Map( (1,  "Go to island." ),  (2,  "Find big X on ground." ),  (3,  "Dig....
While Schleife val  names = Array( &quot;Dennis&quot; ,  &quot;Christian&quot; ) var  i = 0 while (i < names.length) { pri...
For Schleife val  names = Array( &quot;Dennis&quot; ,  &quot;Christian&quot; ) for (name <- names) println(name)
Foreach Collection val  names = Array( &quot;Dennis&quot; ,  &quot;Christian&quot; ) names.foreach(name => println(name))
Throw Exceptions def  max(x : Int, y : Int) : Int = { if (x < 0) throw   new  Exception( &quot;Negativ Int!&quot; ) ... }
Catch Exceptions try  {  ...  }  catch  { case  ioe: IOException  => println( &quot;Fehler beim  lesen auf dem Filesystem&...
Scala OOP Basics
Everything is a Object
Numbers are Objects 1 + 2 * 3 / x = (1).+(((2).*(3))./(x))
Objekte object  DemoService { def  print(msg : String) { println(msg) } } DemoService.print( &quot;Hello World&quot; )
Klassen class  Complex(real: Double, imaginary: Double) { def  re() = real def  im() = imaginary }
Klassen class  Complex(real: Double, imaginary: Double) { def  re = real def  im = imaginary }
Abstrakte Klassen abstract class  Complex(real: Double,  imaginary: Double) { abstract def  re() def  im = imaginary }
Klassen protected class  Complex(real: Double,  imaginary: Double) { private   def  re() = real protected   def  im() = im...
Auxiliary   Constructors class  Complex(real: Double,  imaginary: Double) { def   this () =  this (0,0) def  re() = real d...
Packages und Imports package  demo import  javax._ import  scala.collection.mutable.HashMap
Scala Live Demo Getting Started ….
Scala OOP Teil 2
Traits trait  Ord { def  < (that: Any): Boolean def  <=(that: Any): Boolean  = ( this  < that) || ( this  == that) def  > ...
Operators + * - /  class  Demo { def  + (x : Int) = 1 + x } var  o1 =  new  MyOrd println(o1 + 1)
Methoden Overloading class  Demo { def  + (x : Int) = 1 + x def  + (x : Demo) = 1 + 1 }
Methoden Überschreiben class  Complex(real: Double, imaginary: Double) { def  re = real def  im = imaginary override   def...
Case Klassen abstract   class  Tree case   class  Sum(l: Tree, r: Tree)  extends  Tree case   class  Var(n: String)  exten...
Pattern Matching def  eval(t: Tree, env: Environment): Int = t  match  { case  Sum(l, r) => eval(l, env) + eval(r, env) ca...
Advanced  Features
For-Comprehensions for  (p <- persons  if  p.age > 20)  yield  p.name def  queens(n: Int): List[List[Int]] = { def  placeQ...
Genericity class  Reference[T] { private   var  contents: T = _ def  set(value: T) { contents = value } def  get: T = cont...
Generic Stack abstract   class  Stack[A] { def  push(x: A): Stack[A] =  new  NonEmptyStack[A](x,  this ) def  isEmpty: Boo...
Lazy Values case   class  Employee(id: Int, name: String, managerId: Int) { lazy   val  manager: Employee = Db.get(manager...
Implicit Parameters implicit   object  stringMonoid  extends  Monoid[String] { def  add(x: String, y: String): String = x....
Implicit Conversions implicit   def  int2ordered(x: Int): Ordered[Int] =  new  Ordered[Int] { def  compare(y: Int): Int = ...
Annotations @field class  BeanProperty  extends  annotation.StaticAnnotation
Scala Java Integration // Java  public   class  MainJava { public   static   void  main(String[] args) { Point point =  ne...
Package Objects package   object  demo { implicit   def  toPoint(name: String) =  new  Point }
Scala in Action
Java Beans mit Scala class  PersonBean { @scala.reflect.BeanProperty var  name : String  =  &quot;&quot; }
JUnit Tests with Scala import  org.junit._ import  org.junit.Assert._; class  MaxTest { var  max : MathUtils =  null ; @Be...
Scala als DSL Toolkit
Internal DSLs mit Scala
Robot DSL object  DemoRobot  extends  RobotProgram  with  Application { 000 PRINT  &quot;Lunar Mars Program starts.&quot; ...
External DSLs mit Scala
Fragen ?
References <ul><li>Scala –  http://www.scala-lang.org/ </li></ul><ul><li>Scala IDE -  http://www.scala-ide.org/ </li></ul>...
Upcoming SlideShare
Loading in...5
×

SDC - Einführung in Scala

1,073

Published on

Einführung in Scala - Seitenbau Developer Convention 2011. Basics der Sprache Scala.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,073
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

SDC - Einführung in Scala

  1. 1. Einführung in Scala SDC 2011 - Seitenbau Konstanz Christian Baranowski Dennis Braunsdorf
  2. 2. Was ist Scala?
  3. 3. Scala a Scalable Language
  4. 4. Scala Bazaar Scala = Bazaar Java = Cathedral “ The Cathedral and the Bazaar” - Eric S. Raymond
  5. 5. Warum Scala?
  6. 6. Scala ist objekt-orientiert
  7. 7. Everything is a Object
  8. 8. Scala ist funktional
  9. 9. Scala ist statisch typisiert
  10. 10. Scala Basics
  11. 11. Variablen var msg = &quot;Hello SDC!&quot; // Java Code String msg = &quot;Hello World&quot; ; val msg = &quot;Hello SDC!“ // Java Code final String msg = &quot;Hello World&quot; ;
  12. 12. Funktionen def max(x : Int, y : Int) : Int = { if (x > y) { return x; } else { return y; } }
  13. 13. Funktionen def max(x : Int, y : Int) : Int = { if (x > y) { x } else { y } }
  14. 14. Funktionen def max(x : Int, y : Int) : Int = { if (x > y) x else y }
  15. 15. Funktionen def max(x : Int, y : Int) = { if (x > y) x else y }
  16. 16. Procedure def printer(msg : String) { ... }
  17. 17. Funktionen Composition and Scoping def max(x : Int, y : Int) = { def xGreater() = { x > y } if (xGreater()) x else y }
  18. 18. Funktionen Composition and Scoping def max(x : Int, y : Int) = { def xGreater() = { x > y } if (xGreater) x else y }
  19. 19. Functions are objects def oncePerSecond(callback: () => Unit) { while ( true ) { callback(); Thread sleep 1000 } } def timeFlies() { println( &quot;time flies like an arrow...&quot; ) } oncePerSecond(timeFlies)
  20. 20. Anonymous Functions def oncePerSecond(callback: () => Unit) { while ( true ) { callback(); Thread sleep 1000 } } oncePerSecond(() => println( &quot;time flies like an arrow...&quot; ))
  21. 21. Arrays val names = new Array[String](2) names(0) = &quot;Dennis&quot; names(1) = &quot;Christian&quot;
  22. 22. Arrays val names = Array( &quot;Dennis&quot; , &quot;Christian&quot; )
  23. 23. Arrays val names = Array( &quot;Dennis&quot; , &quot;Christian&quot; , true , 0, 1.5) val names : Array[Any] = Array( &quot;Dennis&quot; , &quot;Christian&quot; , true , 0, 1.5)
  24. 24. Listen val oneTwo = List(1, 2) val threeFour = List(3, 4) val oneTwoThreeFour = oneTwo ::: threeFour val oneTwoThree = 1 :: 2 :: 3 :: Nil
  25. 25. Tuples val dennis = (1, &quot;Dennis&quot; ) val christian = (2, &quot;Christian&quot; ) val dennis = ( &quot;Dennis&quot; , &quot;Braunsdorf&quot; ) println(dennis._1) println(dennis._2)
  26. 26. Sets
  27. 27. Sets import scala.collection.mutable.HashSet val jetSet = new HashSet[String] jetSet += &quot;Lear&quot; jetSet += ( &quot;Boeing&quot; , &quot;Airbus&quot; ) println(jetSet.contains( &quot;Cessna&quot; ))
  28. 28. Sets val jetSet = Set( &quot;AirBus&quot; ) jetSet: scala.collection.immutable.Set[java.lang.String]
  29. 29. Maps
  30. 30. Maps import scala.collection.mutable.HashMap val treasureMap = new HashMap[Int, String] treasureMap += 1 -> &quot;Go to island.&quot; treasureMap += 2 -> &quot;Find big X on ground.&quot; treasureMap += 3 -> &quot;Dig.&quot; println(treasureMap(2))
  31. 31. Maps val treasureMap = Map( (1, &quot;Go to island.&quot; ), (2, &quot;Find big X on ground.&quot; ), (3, &quot;Dig.&quot; ) )
  32. 32. While Schleife val names = Array( &quot;Dennis&quot; , &quot;Christian&quot; ) var i = 0 while (i < names.length) { println(names(i)) i = i + 1 }
  33. 33. For Schleife val names = Array( &quot;Dennis&quot; , &quot;Christian&quot; ) for (name <- names) println(name)
  34. 34. Foreach Collection val names = Array( &quot;Dennis&quot; , &quot;Christian&quot; ) names.foreach(name => println(name))
  35. 35. Throw Exceptions def max(x : Int, y : Int) : Int = { if (x < 0) throw new Exception( &quot;Negativ Int!&quot; ) ... }
  36. 36. Catch Exceptions try { ... } catch { case ioe: IOException => println( &quot;Fehler beim lesen auf dem Filesystem&quot; ) case e: Exception => println( &quot;Unbekannter Fehler&quot; ) }
  37. 37. Scala OOP Basics
  38. 38. Everything is a Object
  39. 39. Numbers are Objects 1 + 2 * 3 / x = (1).+(((2).*(3))./(x))
  40. 40. Objekte object DemoService { def print(msg : String) { println(msg) } } DemoService.print( &quot;Hello World&quot; )
  41. 41. Klassen class Complex(real: Double, imaginary: Double) { def re() = real def im() = imaginary }
  42. 42. Klassen class Complex(real: Double, imaginary: Double) { def re = real def im = imaginary }
  43. 43. Abstrakte Klassen abstract class Complex(real: Double, imaginary: Double) { abstract def re() def im = imaginary }
  44. 44. Klassen protected class Complex(real: Double, imaginary: Double) { private def re() = real protected def im() = imaginary }
  45. 45. Auxiliary Constructors class Complex(real: Double, imaginary: Double) { def this () = this (0,0) def re() = real def im() = imaginary }
  46. 46. Packages und Imports package demo import javax._ import scala.collection.mutable.HashMap
  47. 47. Scala Live Demo Getting Started ….
  48. 48. Scala OOP Teil 2
  49. 49. Traits trait Ord { def < (that: Any): Boolean def <=(that: Any): Boolean = ( this < that) || ( this == that) def > (that: Any): Boolean = !( this <= that) def >=(that: Any): Boolean = !( this < that) } trait Service class MyOrd extends Ord with Service { def < (that: Any): Boolean = false }
  50. 50. Operators + * - / class Demo { def + (x : Int) = 1 + x } var o1 = new MyOrd println(o1 + 1)
  51. 51. Methoden Overloading class Demo { def + (x : Int) = 1 + x def + (x : Demo) = 1 + 1 }
  52. 52. Methoden Überschreiben class Complex(real: Double, imaginary: Double) { def re = real def im = imaginary override def toString() = &quot;&quot; + re + ( if (im < 0) &quot;&quot; else &quot;+&quot; ) + im + &quot;i„ }
  53. 53. Case Klassen abstract class Tree case class Sum(l: Tree, r: Tree) extends Tree case class Var(n: String) extends Tree case class Const(v: Int) extends Tree
  54. 54. Pattern Matching def eval(t: Tree, env: Environment): Int = t match { case Sum(l, r) => eval(l, env) + eval(r, env) case Var(n) => env(n) case Const(v) => v } def derive(t: Tree, v: String): Tree = t match { case Sum(l, r) => Sum(derive(l, v), derive(r, v)) case Var(n) if (v == n) => Const(1) case _ => Const(0) } val exp: Tree = Sum(Sum(Var( &quot;x&quot; ),Var( &quot;x&quot; )),Sum(Const(7),Var( &quot;y&quot; ))) val env: Environment = { case &quot;x&quot; => 5 case &quot;y&quot; => 7 } println( &quot;Expression: &quot; + exp) println( &quot;Evaluation with x=5, y=7: &quot; + eval(exp, env)) println( &quot;Derivative relative to x:n &quot; + derive(exp, &quot;x&quot; )) println( &quot;Derivative relative to y:n &quot; + derive(exp, &quot;y&quot; ))
  55. 55. Advanced Features
  56. 56. For-Comprehensions for (p <- persons if p.age > 20) yield p.name def queens(n: Int): List[List[Int]] = { def placeQueens(k: Int): List[List[Int]] = if (k == 0) List(List()) else for { queens <- placeQueens(k - 1) column <- List.range(1, n + 1) if isSafe(column, queens, 1) } yield column :: queens placeQueens(n) } def isSafe(col: Int, queens: List[Int], delta: Int): Boolean for (b <- books; a <- b.authors if a startsWith &quot;Ullman&quot; ) yield b.title
  57. 57. Genericity class Reference[T] { private var contents: T = _ def set(value: T) { contents = value } def get: T = contents } object IntegerReference { def main(args: Array[String]) { val cell = new Reference[Int] cell.set(13) println( &quot;Reference contains the half of &quot; + (cell.get * 2)) } }
  58. 58. Generic Stack abstract class Stack[A] { def push(x: A): Stack[A] = new NonEmptyStack[A](x, this ) def isEmpty: Boolean def top: A def pop: Stack[A] } class EmptyStack[A] extends Stack[A] { def isEmpty = true def top = error( &quot;EmptyStack.top&quot; ) def pop = error( &quot;EmptyStack.pop&quot; ) } class NonEmptyStack[A](elem: A, rest: Stack[A]) extends Stack[A] { def isEmpty = false def top = elem def pop = rest }
  59. 59. Lazy Values case class Employee(id: Int, name: String, managerId: Int) { lazy val manager: Employee = Db.get(managerId) lazy val team: List[Employee] = Db.team(id) }
  60. 60. Implicit Parameters implicit object stringMonoid extends Monoid[String] { def add(x: String, y: String): String = x.concat(y) def unit: String = &quot;&quot; } implicit object intMonoid extends Monoid[Int] { def add(x: Int, y: Int): Int = x + y def unit: Int = 0 }
  61. 61. Implicit Conversions implicit def int2ordered(x: Int): Ordered[Int] = new Ordered[Int] { def compare(y: Int): Int = if (x < y) -1 else if (x > y) 1 else 0 }
  62. 62. Annotations @field class BeanProperty extends annotation.StaticAnnotation
  63. 63. Scala Java Integration // Java public class MainJava { public static void main(String[] args) { Point point = new Point(); point.name(); } } // Scala class Point(x : Int, y : Int) { var name = &quot;Bin ein Point&quot; def this () = this (0, 0) override def toString = name + &quot; : x=&quot; + x + &quot; : y=&quot; + y }
  64. 64. Package Objects package object demo { implicit def toPoint(name: String) = new Point }
  65. 65. Scala in Action
  66. 66. Java Beans mit Scala class PersonBean { @scala.reflect.BeanProperty var name : String = &quot;&quot; }
  67. 67. JUnit Tests with Scala import org.junit._ import org.junit.Assert._; class MaxTest { var max : MathUtils = null ; @Before def setup(){ max = new MathUtils } @Test def max_fiveGreaterThenFour() { assertEquals(5, max.max(5, 4)); } }
  68. 68. Scala als DSL Toolkit
  69. 69. Internal DSLs mit Scala
  70. 70. Robot DSL object DemoRobot extends RobotProgram with Application { 000 PRINT &quot;Lunar Mars Program starts.&quot; 001 MOVE(1, 10) 002 SLEEP2000 003 MOVE(10, 10) 004 PRINT &quot;POSITION Now 10, 10&quot; 005 MOVE(20, 20) 006 END RUN }
  71. 71. External DSLs mit Scala
  72. 72. Fragen ?
  73. 73. References <ul><li>Scala – http://www.scala-lang.org/ </li></ul><ul><li>Scala IDE - http://www.scala-ide.org/ </li></ul><ul><li>Scala Code Snippets http://www.scala-lang.org/node/220 </li></ul><ul><li>Scala By Example http://www.scala-lang.org/docu/files/ScalaByExample.pdf </li></ul><ul><li>Scala Tutorial http://www.scala-lang.org/docu/files/ScalaTutorial.pdf </li></ul><ul><li>Scala Actors - http://www.scala-lang.org/node/242 </li></ul><ul><li>Lift http://liftweb.net </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×