Top Banner
On Scala Or: Why Static Typing Doesn't Have to Suck
33

On Scala Slides - OSDC 2009

Jan 15, 2015

Download

Technology

Michael Neale

A presentation by Tom Lee and Michael Neale at OSDC conference, Brisbane, 2009. Why scala sucks less.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: On Scala Slides - OSDC 2009

On ScalaOr: Why Static Typing Doesn't Have

to Suck

Page 2: On Scala Slides - OSDC 2009

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

On Java ...

Page 4: On Scala Slides - OSDC 2009

The Language Is Like, So 1991

Page 5: On Scala Slides - OSDC 2009

But The VM is Okay

Page 6: On Scala Slides - OSDC 2009

And there are libraries for everything

Page 7: On Scala Slides - OSDC 2009

On Scala ...

Page 8: On Scala Slides - OSDC 2009

What We Want To Say

"I want a mapping of String keys to Integer values"

Page 9: On Scala Slides - OSDC 2009

What We Have To Say in Java

HashMap<String, Integer> map = new HashMap<String, Integer>();

Page 10: On Scala Slides - OSDC 2009

What We Can Say in Scala

val map = new HashMap[String, Int]

Page 11: On Scala Slides - OSDC 2009

What we want to say

"I want stuff to happen when the user click a button"

Page 12: On Scala Slides - OSDC 2009

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

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

But what about Ruby/Python/Perl?!!1!

Page 15: On Scala Slides - OSDC 2009

Scala types are statically checked

Page 16: On Scala Slides - OSDC 2009

Sun JVM: no GIL / green threads / etc.

Page 17: On Scala Slides - OSDC 2009

But Scala is comparably expressive

Page 18: On Scala Slides - OSDC 2009

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

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

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

The best of both worlds?

Page 22: On Scala Slides - OSDC 2009

Other cool Scala stuff

Page 23: On Scala Slides - OSDC 2009

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

Actors for concurrency

Page 25: On Scala Slides - OSDC 2009

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

Pattern matching

Page 27: On Scala Slides - OSDC 2009

Implicits

implicit def extendClass(c: LegacyClass) = EnhancedClass(c)

//demo !

//used to enhance stuff

//use wisely !

Page 28: On Scala Slides - OSDC 2009

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

Functional Programming

• fold*• map• filter• lazy sequences

Page 30: On Scala Slides - OSDC 2009

Functional Programming

Page 31: On Scala Slides - OSDC 2009

Dynamic language-like?

Duck typing => Structural typing

Monkey patching => Implicit methods

A shell !

Page 32: On Scala Slides - OSDC 2009

Who is using it? 

• Twitter• Foursquare• EDF Trading• Siemens• ... and others!

Page 33: On Scala Slides - OSDC 2009

Questions?