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

Scala Sjug 09

Jan 15, 2015

Download

Technology

Michael Neale

Scala talk for Sydney JUG, September 2009.
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: 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.