1. Scala â why you
should care
SJUG @ Atlassian HQ, 2009
Michael Neale
JBoss R&D
Red Hat Middleware
1
2. Michael Neale
R&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 !
2
3. Outline
⢠The elevator pitch
⢠Why another language?
⢠Scala in more detail
⢠Actors/concurrency
⢠State of the tools
⢠How to integrate/migrate
⢠Q&A
3
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
4
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..)
6
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 ! */
7
10. Closures... fnally
Pascal has them, Even C has them...
(age: Int) => println(âI am â + age)
val fn = (age: Int) => ....
10
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...
11
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)
13
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
14
16. Just so you know I am not making this up...
16
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
17
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
18
20. Implicits...
.. Is how you âextendâ a class
Anywhere âin scopeâ - called
automagically
With great power comes...
Its compile time and safe
20
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 !
22
e:
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...
27
28. State of the tools
⢠IntelliJ demo time...
⢠Eclipse â well, maybe with 2.8
⢠Netbeans: Good !
⢠Emacs/textmate ??
⢠Maven works well (/me ducks)
28
29. Who is using it ?
⢠Big Important companies all over...
⢠Twitter !
⢠EPFL, Jetbrains etc committed to
continuing development and stability
and tools !
29
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
30
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.
31
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
32
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
33
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.
35