Download - Scala Sjug 09
![Page 1: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/1.jpg)
1
Scala – why you should careSJUG @ Atlassian HQ, 2009
Michael NealeJBoss R&DRed Hat Middleware
![Page 2: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/5.jpg)
5
What's it like to drive
![Page 6: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/8.jpg)
8
Higher level
![Page 9: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/9.jpg)
9
![Page 10: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/10.jpg)
10
Closures... fnallyPascal has them, Even C has them...
(age: Int) => println(“I am “ + age)
val fn = (age: Int) => ....
![Page 11: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/12.jpg)
12
![Page 13: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/15.jpg)
15
![Page 16: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/16.jpg)
16
Just so you know I am not making this up...
![Page 17: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/19.jpg)
19
Dynamic language “magic”
• Monkey patching → Implicits
• Duck typing → Structural typing
![Page 20: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/21.jpg)
21
Structural typing
![Page 22: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/23.jpg)
23
Pattern matching
![Page 24: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/24.jpg)
24
Everything is..• An expression that returns a value
• “Unit” is like Void
• Even if “statements”, pattern matches etc.
![Page 25: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/25.jpg)
25
DSL friendly• Malleable syntax (internal DSLs)
• Parser combinator library (write parsers in scala)
![Page 26: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/26.jpg)
26
Concurrency
![Page 27: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/30.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/31.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/32.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/33.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/34.jpg)
34
Resources...• scala-lang.org
• A few good books (Programming In Scala) and growing
• #scala on freenode
![Page 35: Scala Sjug 09](https://reader033.vdocuments.us/reader033/viewer/2022052618/54b73fa44a795966598b4731/html5/thumbnails/35.jpg)
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.