![Page 1: JSUG - Scala Lightning Talk by Michael Greifeneder](https://reader038.vdocument.in/reader038/viewer/2022100600/554f655ab4c905bb178b49ef/html5/thumbnails/1.jpg)
Scala
Lightning Talk@JSUG
Future Languages for the Java VM
Michael Greifeneder
Scala
![Page 2: JSUG - Scala Lightning Talk by Michael Greifeneder](https://reader038.vdocument.in/reader038/viewer/2022100600/554f655ab4c905bb178b49ef/html5/thumbnails/2.jpg)
Overview● Mix of functional and OO programming● Static typing (performance)● FP: Pattern matching, High order functions,
Parametric Polymorphism, Operator overloading
● Closures● Open Source● Functions are objects● Perfect for domain specific languages
![Page 3: JSUG - Scala Lightning Talk by Michael Greifeneder](https://reader038.vdocument.in/reader038/viewer/2022100600/554f655ab4c905bb178b49ef/html5/thumbnails/3.jpg)
Vorteile
● Scala ist kompatibel mit Java. – Alle Bibliotheken können weiterverwendet
werden.
● Scala skaliert– Sprache kann fuer hohere Abstraktionsebenen
angepasst werden. zB Actors!
● Kann als Scripting Sprache verwendet werden
● Kurzer Code, aussagekraeftig
![Page 4: JSUG - Scala Lightning Talk by Michael Greifeneder](https://reader038.vdocument.in/reader038/viewer/2022100600/554f655ab4c905bb178b49ef/html5/thumbnails/4.jpg)
Code
● abstract class SomethingWithName(name:String) { override def toString():String = name def does(what:(SomethingWithName)=>unit) { what(this);}}case class Person(name:String) extends SomethingWithName(name:String) { def says(msg: String) = { print(name + " says " + msg)} def apply(name:String):Person = new Person(name)}case class Stone(name:String) extends SomethingWithName (name:String) { def apply(name:String):Bagger = new Bagger(name)}def swimming(who:SomethingWithName) = who match { case Person(name)=>print("Swims in pool: " + name) case Stone(name)=>print("On the ground: " + name)
● var Tom = Person("Tom")var YellowStone = Stone("YellowStone")Tom says "Hello"Tom does swimming //Tom.does(swimming)YellowStone does swimming;
![Page 5: JSUG - Scala Lightning Talk by Michael Greifeneder](https://reader038.vdocument.in/reader038/viewer/2022100600/554f655ab4c905bb178b49ef/html5/thumbnails/5.jpg)
Output
● >scala dsl.scala
● Tom says Hello
● Swimming in pool: Tom
● On the ground: YellowBagger
![Page 6: JSUG - Scala Lightning Talk by Michael Greifeneder](https://reader038.vdocument.in/reader038/viewer/2022100600/554f655ab4c905bb178b49ef/html5/thumbnails/6.jpg)
Skriptsprache !?
● Folge von Statements● Zugriff auf Kommandozeilenargumente
println("Hello " + args(0) + "!")
● Ausführenscala test.scala
● Shellscript– #!/bin/shexec scala "$0" "$@"!#println("Hello, " + args(0) + "!")
![Page 7: JSUG - Scala Lightning Talk by Michael Greifeneder](https://reader038.vdocument.in/reader038/viewer/2022100600/554f655ab4c905bb178b49ef/html5/thumbnails/7.jpg)
Closures
● Tom does ((in:SomethingWithName) => { print("Who needs closures? Maybe " + in + "?") })
● Output:
– Who needs closures? Maybe Tom?
● Auch nett:
– args.foreach(arg => println(arg))
● Noch kürzer
– args.forach(println)
![Page 8: JSUG - Scala Lightning Talk by Michael Greifeneder](https://reader038.vdocument.in/reader038/viewer/2022100600/554f655ab4c905bb178b49ef/html5/thumbnails/8.jpg)
XML Processing
![Page 9: JSUG - Scala Lightning Talk by Michael Greifeneder](https://reader038.vdocument.in/reader038/viewer/2022100600/554f655ab4c905bb178b49ef/html5/thumbnails/9.jpg)
Syntax Sugar
![Page 10: JSUG - Scala Lightning Talk by Michael Greifeneder](https://reader038.vdocument.in/reader038/viewer/2022100600/554f655ab4c905bb178b49ef/html5/thumbnails/10.jpg)
Functional Style
![Page 11: JSUG - Scala Lightning Talk by Michael Greifeneder](https://reader038.vdocument.in/reader038/viewer/2022100600/554f655ab4c905bb178b49ef/html5/thumbnails/11.jpg)
Ease of Use
● Maps– val map = Map(“Austria”->”Vienna”,“Germany”->”Berlin”, “Switzerland” -> “Bern”)map(“Austria”
● List– val list = List(1,2,3)
val list2 = 1 ::: 2 ::: 3 ::: Nil
![Page 12: JSUG - Scala Lightning Talk by Michael Greifeneder](https://reader038.vdocument.in/reader038/viewer/2022100600/554f655ab4c905bb178b49ef/html5/thumbnails/12.jpg)
Short Code
● Keine Strichpunkt notwendig.● Keine geschwungenen Klammern notwendig
bei einem Ausdruck– def method = x
● First class functions– args.foreach(println)
●
![Page 13: JSUG - Scala Lightning Talk by Michael Greifeneder](https://reader038.vdocument.in/reader038/viewer/2022100600/554f655ab4c905bb178b49ef/html5/thumbnails/13.jpg)
Matching Expressions
● val friend = args(0) match {case "salt" => "pepper"case "chips" => "salsa"case "eggs" => "bacon"case _ => "huh?"
}● Keine Breaks notwendig● Match kann auch Ergebnis liefern
![Page 14: JSUG - Scala Lightning Talk by Michael Greifeneder](https://reader038.vdocument.in/reader038/viewer/2022100600/554f655ab4c905bb178b49ef/html5/thumbnails/14.jpg)
Catching Exceptions
● try { doSomething()} catch { case ex: IOException => println("Oops!") case ex: NullPointerException => println("Oops!!")}
![Page 15: JSUG - Scala Lightning Talk by Michael Greifeneder](https://reader038.vdocument.in/reader038/viewer/2022100600/554f655ab4c905bb178b49ef/html5/thumbnails/15.jpg)
Actors! (And Action!)● object PrintActor extends Actor{ def act() = { var num = 0; react{ case msg:String => println(num + msg) case c:Int => num+=c } }}Tester.start(); Tester ! 2Tester ! “First Message”;