on scala slides - osdc 2009
DESCRIPTION
A presentation by Tom Lee and Michael Neale at OSDC conference, Brisbane, 2009. Why scala sucks less.TRANSCRIPT
![Page 1: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/1.jpg)
On ScalaOr: Why Static Typing Doesn't Have
to Suck
![Page 2: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/2.jpg)
Your Designated Presenter Units
Michael Neale • Employed by Red Hat
o Works on various jboss projectso Talks a lot
• Developer behind Drools
Thomas Lee • Works for Shine Technologies
o Groundskeeper• Sporadic open source contributor guy
![Page 3: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/3.jpg)
On Java ...
![Page 4: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/4.jpg)
The Language Is Like, So 1991
![Page 5: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/5.jpg)
But The VM is Okay
![Page 6: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/6.jpg)
And there are libraries for everything
![Page 7: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/7.jpg)
On Scala ...
![Page 8: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/8.jpg)
What We Want To Say
"I want a mapping of String keys to Integer values"
![Page 9: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/9.jpg)
What We Have To Say in Java
HashMap<String, Integer> map = new HashMap<String, Integer>();
![Page 10: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/10.jpg)
What We Can Say in Scala
val map = new HashMap[String, Int]
![Page 11: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/11.jpg)
What we want to say
"I want stuff to happen when the user click a button"
![Page 12: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/12.jpg)
What we have to say in Java
import javax.swing.JButton;import java.awt.event.ActionListenerimport java.awt.event.ActionEvent
JButton button = new JButton("Click Me!");button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { // stuff(); }});
![Page 13: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/13.jpg)
What we can say in Scala
import scala.swing.Buttonimport scala.swing.events.ButtonClicked val button = new Button("Click Me!")button.reactions += { case ButtonClicked(e) => // stuff()}
![Page 14: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/14.jpg)
But what about Ruby/Python/Perl?!!1!
![Page 15: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/15.jpg)
Scala types are statically checked
![Page 16: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/16.jpg)
Sun JVM: no GIL / green threads / etc.
![Page 17: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/17.jpg)
But Scala is comparably expressive
![Page 18: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/18.jpg)
An example: Ruby and Scala
"Both a house and a car can be sold, but are not related."
![Page 19: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/19.jpg)
What we say in Ruby
class House; def value; 400000; end; endclass Car; def value; 30000; end; endclass BankAccount def initialize(balance); @balance = balance; end def credit(amount); @balance += amount; endend def sell(acct, asset); acct.credit(asset.value); endbank_acct = BankAccount.new(0)sell(bank_acct, House.new)sell(bank_acct, Car.new)
![Page 20: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/20.jpg)
What we say in Scala
class House { def value = 400000 }class Car { def value = 30000 }class BankAccount(var balance : Int) def credit(balance : Int) = this.balance += balance}
object BankApp extends Application { def sell(acct:BankAccount, asset:{def value : Int}) = acct.credit(asset.value) val bankAcct = new BankAccount(0) sell(bankAcct, new House) sell(bankAcct, new Car)}
![Page 21: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/21.jpg)
The best of both worlds?
![Page 22: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/22.jpg)
Other cool Scala stuff
![Page 23: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/23.jpg)
Actors for concurrency
val actor = actor { loop { receive { case Message(m) => ... case Another(m) => reply { answer }}}}
actor ! Message("hello")val answer = actor !? Another("ola")
//its just a library ! other options: STM etc...
![Page 24: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/24.jpg)
Actors for concurrency
![Page 25: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/25.jpg)
Pattern matching
val v = something match { case Something(s) => whatever(s) case m: SomeClass => whatever(m) case (42, "hey") => 42 case _ => "Nothing matched"}
//compiler can warn for non exhaustive match
![Page 26: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/26.jpg)
Pattern matching
![Page 27: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/27.jpg)
Implicits
implicit def extendClass(c: LegacyClass) = EnhancedClass(c)
//demo !
//used to enhance stuff
//use wisely !
![Page 28: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/28.jpg)
Functional Programming
closures/lambdas
(i: Int, s: String) => println(s + (i + 1))
val func = (i : Int) => ....
val nums = (1 to 100) filter (_ < 50)
def log(message: => String) = ....
val immutableList = List(1, 2, 3)
def calcSomething : Option[Result] = ...calcSomething match { case Result => ... } //no NPE !
![Page 29: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/29.jpg)
Functional Programming
• fold*• map• filter• lazy sequences
![Page 30: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/30.jpg)
Functional Programming
![Page 31: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/31.jpg)
Dynamic language-like?
Duck typing => Structural typing
Monkey patching => Implicit methods
A shell !
![Page 32: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/32.jpg)
Who is using it?
• Twitter• Foursquare• EDF Trading• Siemens• ... and others!
![Page 33: On Scala Slides - OSDC 2009](https://reader031.vdocuments.site/reader031/viewer/2022013100/54b755474a795917738b461e/html5/thumbnails/33.jpg)
Questions?