Yes scala can!

Post on 06-May-2015

4.111 views 0 download

Tags:

description

The presentation I had for Stockholm Knowledge Network. For demo code please refer to https://github.com/anderseriksson/yesscalacan

Transcript of Yes scala can!

The place for sharing ideas and knowledge

Yes Scala Can!

Amir Moulavi Anders Eriksson @mamirm @anders_eriksson amir.moulavi@jayway.com anders.eriksson@jayway.com

Jayway Stockholm2012-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!

It has been a revolution!

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 a unifier

Scala is Object-oriented

Scala is Functional

Scala is statically typed

Scala is concisepublic 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;

}

public int getAge() {

return age;

}}

Java

Scala is conciseclass Person(val name:String, val age:Int)

Scala

Scala is expressive (1 to 10) filter (_ > 7)

REPL

The command line for Scala

Tuples

( , )( , , )( , , , )( , , , , )( , , , , , )

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

REPL and Tuples

Case classes

Case classes

● Easier instantiation ● Immutability in constructor parameters by

default ● You get these methods for free

○ toString()○ equals()○ hashCode()○ apply()○ copy()

Case classes

Pattern Matching

Pattern Matching

● Similar to Java's switch statement ● Let you match any sort of data ● First-match policy

Pattern Matching

Higher Order Functions

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)

Higher Order Functions

map(f) filter(f)

Powerful Collections

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

Scala Collections

MutableImmutable

Powerful Collections

● List○ Immutable and ListBuffer is mutable

● Array ○ Mutable

● Set○ Immutable and mutable

● Map○ Immutable and mutable

● ... and String!○

Powerful Collections with Higher Order Functions

Traits

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

Traits

Rich interfaces

Stackable modifications

Traits

Parallel Collections

Parallel Collections

● Supports the same operations as sequential ones

● Easily convert sequential to parallel

collection

Parallel Collections

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!

What's Scala advantage over Java as a language choice?

● 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 andBill Venners Scala for the Impatient byCay 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

Where to go from here?

Questions?

Thank you!

The place for sharing ideas and knowledge