Scala Sjug 09

35
1 Scala – why you should care SJUG @ Atlassian HQ, 2009 Michael Neale JBoss R&D Red Hat Middleware

description

Scala talk for Sydney JUG, September 2009.

Transcript of Scala Sjug 09

Page 1: Scala Sjug 09

1

Scala – why you should careSJUG @ Atlassian HQ, 2009

Michael NealeJBoss R&DRed Hat Middleware

Page 2: Scala Sjug 09

2

Michael NealeR&D w. JBoss (specialise in drools)

Open source history (user -> fulltime developer “acquired” by jboss 2005).

Thanks Atlassian !

me on the web:

www.michaelneale.net, twitter.com/michaelneale, michaelneale.blogspot.com

Some slides borrowed from Jonas Boner !

Page 3: Scala Sjug 09

3

Outline• The elevator pitch

• Why another language?

• Scala in more detail

• Actors/concurrency

• State of the tools

• How to integrate/migrate

• Q&A

Page 4: Scala Sjug 09

4

Quick intro• Scala is a OO/FP hybrid language

• Statically strongly typed

• Scala is a compiler + small (ish) rt.jar

• Compiles statically to bytecode

• Interops fawlessly with JVM/java code (in source**, or library form in both directions)

• FP favour (but not “pure”)

• Both more static and more OO then java

Page 5: Scala Sjug 09

5

What's it like to drive

Page 6: Scala Sjug 09

6

The surface diferences...public Integer methodName()... public void another(String s)...

def methodName : Integer = {...}

def another(s: String) = {...}

String x = “abc”; final String y = “def”;

var x = “abc”

val x = “def”

public class MyClass

class Foo

(punctuation generally optional: brackets, semi-colons etc..)

Page 7: Scala Sjug 09

7

final Map<String, Integer> m = new HashMap<String, Integer>();

m.put(“hello”, 42);

m.put(“goodbye”, 42);

val m = Map(“hello” -> 42, “goodbye” -> 42)

/* Actually a smaller grammar then java ! */

Page 8: Scala Sjug 09

8

Higher level

Page 9: Scala Sjug 09

9

Page 10: Scala Sjug 09

10

Closures... fnallyPascal has them, Even C has them...

(age: Int) => println(“I am “ + age)

val fn = (age: Int) => ....

Page 11: Scala Sjug 09

11

Why another language

Java showing its age

Was built in a hurry, unable to shoe-horn enough in... (eg. unable to agree on Closures)

Well documented issues...

(and some don't want it to change)

But JVM is made of awesome...

Page 12: Scala Sjug 09

12

Page 13: Scala Sjug 09

13

But why Scala... • Why not?

• Valid javac successor (true to the intentions of Java, static typed, fast etc)

• Designed by expert(s)

– Based on hard won lessons

• Not dynamic, nice for “systems” programming

• Obey ! (and Gosling likes it)

Page 14: Scala Sjug 09

14

Slightly deeper• Scala is very deep, but you don't have

to know that much (unless you are a library author, probably).

• Can write it as “nicer java” if you like, but lends itself to FP

Page 15: Scala Sjug 09

15

Page 16: Scala Sjug 09

16

Just so you know I am not making this up...

Page 17: Scala Sjug 09

17

Using java libs..• Just works

• Arrays in java are “decorated” to be like “Lazy sequences”

• (previous slide was JExcel API)

• Other common data types are “often decorated” to be scala-friendly

• Outgoing library: use java collections, Arrays etc as you would like to see them

Page 18: Scala Sjug 09

18

Lazyness...• Hard work pays of eventually

• (but lazyness pays of now)

• Lazy can be GOOD in a language

• “lazy” keyword, lazy sequences..

– But can be some traps: put in a print statement and it will exec, remove and it won't... - heisenbugs

Page 19: Scala Sjug 09

19

Dynamic language “magic”

• Monkey patching → Implicits

• Duck typing → Structural typing

Page 20: Scala Sjug 09

20

Implicits...

.. Is how you “extend” a class

Anywhere “in scope” - called automagically

With great power comes...

Its compile time and safe

Page 21: Scala Sjug 09

21

Structural typing

Page 22: Scala Sjug 09

22

Traits...• Like interfaces, but can have

implementations in it

• “Mix ins” - compile time or construction time

//Interface:trait Funny { def laugh}

//With impl: trait Person {

def tickle = println(“hahaha”)}

class Michael extends Funny...

val x = new Michael with Person//doesn't have to implement Person !

e:

Page 23: Scala Sjug 09

23

Pattern matching

Page 24: Scala Sjug 09

24

Everything is..• An expression that returns a value

• “Unit” is like Void

• Even if “statements”, pattern matches etc.

Page 25: Scala Sjug 09

25

DSL friendly• Malleable syntax (internal DSLs)

• Parser combinator library (write parsers in scala)

Page 26: Scala Sjug 09

26

Concurrency

Page 27: Scala Sjug 09

27

Option/Either• “Monad” patterns

• Don't have to care, just return option if you are not sure if you will have a result

• (or either if its, well 1 of 2 things...)

• Very easy to use, correct code, very neat...

Page 28: Scala Sjug 09

28

State of the tools

• IntelliJ demo time...

• Eclipse – well, maybe with 2.8

• Netbeans: Good !

• Emacs/textmate ??

• Maven works well (/me ducks)

Page 29: Scala Sjug 09

29

Who is using it ?• Big Important companies all over...

• Twitter !

• EPFL, Jetbrains etc committed to continuing development and stability and tools !

Page 30: Scala Sjug 09

30

Some extra magic• QuickCheck (ScalaCheck)

– Demo– import org.scalacheck.Prop.forAll

– scala> class FeeCalculator(val tax: Int) {

– | def howMuch(tx: Int) = tx + tax + 42

– | }

– val totals = forAll( (amounts: Int) => new FeeCalculator(2).howMuch(amounts) > amounts )

– totals.check

Page 31: Scala Sjug 09

31

Mixed source...• Scala compiler can work with mixed

java and scala source

• (multiple passes) – similar to groovy

• Means you can migrate over only what you need

• Preferred: have modules in all scala or java.

Page 32: Scala Sjug 09

32

Case classes• Case classes help you out (equals,

hashCode, pattern matching)

• No “new” needed

• Eg:case class Car(type: String, cost: Int)

val c = Car

Page 33: Scala Sjug 09

33

Anti static• No statics in Scala

• But you can swap “class” for “object” and its kind of sort of the same (but better)

object MyObject { … }

val x = MyObject

MyObject.whatever

Page 34: Scala Sjug 09

34

Resources...• scala-lang.org

• A few good books (Programming In Scala) and growing

• #scala on freenode

Page 35: Scala Sjug 09

35

Conclusion...• Very powerful, mature, fun !

• Would you use it over groovy?

• No “grails” or “rails” (Lift just Ain't It).

• Thanks !

• Discussion and Q&A

• twitter.com/michaelneale

• www.osdc.com.au - Brisbane in Nov.