Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scala Reloaded

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Mac Mac
May 14, 2015

Scala Reloaded

Updated version of my scala talk

Avatar for Mac

Mac

May 14, 2015
Tweet

Other Decks in Programming

Transcript

  1. Scala?   Statically Typed Language on Java VM   Object

    Oriented Language   Functional Language   Scalable Language   Concurrency
  2. Smart Type System var name = “Powerful the Dark Side

    is”; def makeList(a:String, b:String):List[String] = { return a :: b :: Nil; }
  3. Smart Type System var name = “Powerful the Dark Side

    is”; def makeList(a:String, b:String):List[String] = { return a :: b :: Nil }
  4. Smart Type System var name = “Powerful the Dark Side

    is”; def makeList(a:String, b:String):List[String] = { a :: b :: Nil }
  5. Smart Type System var name = “Powerful the Dark Side

    is”; def makeList(a:String, b:String):List[String] = a :: b :: Nil
  6. Smart Type System var name = “Powerful the Dark Side

    is”; def makeList(a:String, b:String) = a :: b :: Nil
  7. Object Orieted   No primitives   No int, just Int

      No String[], just Array[String]   No operators   + - * / ++ += are just names for methods
  8. Scala Objects class SimpleGreeter { val greeting = "Hello, world!"

    def greet() = println(greeting) } val g = new SimpleGreeter g.greet()
  9. Traits & Mixins trait Friendly { def greet()="Hi" } class

    Cat extends Friendly {} class HungryCat extends Friendly { override def greet() = "Meow" } trait HyperGreeter extends Friendly {override def greet() = super.greet() + "!!!!!!!" }
  10. Traits & Mixins trait Friendly { def greet()="Hi" } class

    Cat extends Friendly {} class HungryCat extends Friendly { override def greet() = "Meow" } trait HyperGreeter extends Friendly {override def greet() = super.greet() + "!!!!!!!" } var pet = new Cat println(pet.greet()) //print Hi
  11. Traits & Mixins trait Friendly { def greet()="Hi" } class

    Cat extends Friendly {} class HungryCat extends Friendly { override def greet() = "Meow" } trait HyperGreeter extends Friendly {override def greet() = super.greet() + "!!!!!!!" } var pet = new HungryCat println(pet.greet()) //print Meow
  12. Traits & Mixins trait Friendly { def greet()="Hi" } class

    Cat extends Friendly {} class HungryCat extends Friendly { override def greet() = "Meow" } trait HyperGreeter extends Friendly {override def greet() = super.greet() + "!!!!!!!" } var pet = new HungryCat with HyperGreeter println(pet.greet()) // print Meow!!!!!!!
  13. XML DSL import scala.xml._ object XMLSample { def main(args: Array[String])

    { val df = java.text.DateFormat.getDateInstance() val dateString = df.format(new java.util.Date()) def theDate(name: String) = <dateMsg addressedTo={ name }> Hello, { name }! Today is { dateString } </dateMsg>; println(theDate("Mac").toString()) } }
  14. Actors   Actor Model: A Different Way to Implement Concurrency

      Each Object is an Actor   Each Actor has a Mailbox
  15. Actors   Actor Model: A Different Way to Implement Concurrency

      Each Object is an Actor   Each Actor has a Mailbox   Actors (Asynchronously) Send Messages and Receive them in their Mailbox
  16. Actors   Actor Model: A Different Way to Implement Concurrency

      Each Object is an Actor   Each Actor has a Mailbox   Actors (Asynchronously) Send Messages and Receive them in their Mailbox   Shares NOTHING!
  17. Why Erlang Is Right?   No code changes for Multi-threaded

    vs Single-threaded   No Mutable State   No Locking, thus no DEAD Locks.   Let it Crash
  18. Actor Example import akka.actor._ class YodaActor extends Actor { def

    receive = { case _ => println("Yoda rules!") } } class VaderActor extends Actor { def receive = { case "luke" => println("No, I'm your father!") case _ => println("Darkside rules!") } }
  19. Actor Example object Main { def main(args: Array[String]) { val

    system = ActorSystem("StarWarsSystem") val yodaActor = system.actorOf(Props[YodaActor], name = "yodaactor") val vaderActor = system.actorOf(Props[VaderActor], name = "vaderactor") yodaActor ! "yes?" vaderActor ! "jedi" vaderActor ! "luke" } }