Yes Scala Can!
Amir Moulavi Anders Eriksson
@mamirm @anders_eriksson
amir.moulavi@jayway.com anders.eriksson@jayway.com
Jayway Stockholm
2012-05-30
Why
● We've found Scala and like it!
● We would like to broaden the interest
amongst Java developers.
● Hopefully this presentation will inspire you to
look more into Scala!
Agenda
● History and Background
● Scala vs. Java: Similarities and Differences
● Quick Journey to Scala
● Book Raffle!
Little history and background
● 2001:
○ Design of Scala started
■ Goals: merge functional + object oriented
paradigms
● 2004:
○ First public release on JVM
Little history and background
● 2006:
○ major rewrite (v 2.0)
● 2011:
○ Company Typesafe is funded for professional
support
Java vs. Scala (similarities)
● Runs on JVM
● Statically typed
● Object oriented
● Garbage collected
Java vs. Scala (differences)
● Pure object orientation
● Functional paradigm
● Pattern matching
● Mixin composition
Java vs. Scala (differences)
● No checked exception
● Implicit conversions
● Flexible imports and access modifier
● Read Evaluate Print Loop (REPL) console
Scala is concise
public class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.int = int;
}
public String getName() {
return name; Java
}
public int getAge() {
return age;
}
}
Tuples
● Saves you the tedium of defining simplistic
data-heavy classes
● Immutable
● Each value different type
● Can contain up to 22 values
● Indexed from 1
Case classes
● Easier instantiation
● Immutability in constructor parameters by
default
● You get these methods for free
○ toString()
○ equals()
○ hashCode()
○ apply()
○ copy()
Higher Order Functions
● Functions are first class citizens in Scala
F:A B
● Higher Order Functions are functions that
take functions as input parameters or return
them as results
F : (A B) (R S)
Powerful Collections
● Easy to use
○ A small vocabulary of 20-50 methods to solve most
collection problems
● Concise
○ A single word instead of several loops!
Powerful Collections
● Safe
○ Functional nature + Statically typed!
● Fast
○ Tuned and optimized collections' operations
● Universal
○ The same operation on any type
Powerful Collections
● List
○ Immutable and ListBuffer is mutable
● Array
○ Mutable
● Set
○ Immutable and mutable
● Map
○ Immutable and mutable
● ... and String!
○
Traits
● Definition:
○ Provides a set of methods that implement
behaviour
○ Requires a set of methods that parameterized the
provided behaviour
○ Does not specify any state variables
Traits
● Interfaces with behaviors
● Fundamental unit of code re-use
● Extremely powerful tool in OO design
Scala and Java Integration
● Seamless integration
● Make full use of existing libraries and code
Scala Java
Scala and Java Integration
● Familiar development environments
○ Eclipse, IntelliJ, Netbeans, ...
● Familiar building tools like Maven
○ SBT
● If you are a Java developer, you're halfway
there!
● implicit parameters
● pattern matching
● case classes
● type inferencing
● higher-kinded types
● monadic for comprehension
● variance annotation
● traits
● default and named argument
● abstract values
● by-name terms
● type aliasing
● self types
● path-dependent types
● structural types
● ...
Conclusion
● Scala is not complex
● Express your ideas in a concise way
● Better code readability
● Scala = Functional + Object oriented
paradigms.
● Scala scales with programmers
Where to go from here?
Programming in Scala, 2nd edition
by Martin Odersky, Lex Spoon and
Bill Venners
Scala for the Impatient by
Cay Hortsmann
Where to go from here?
Scala Stockholm User Group http://www.
meetup.com/Scala-Stockholm/
Where to go from here?
Scala course "Fast-Track to Scala" from
Typesafe
18-19 September, 2012