Multi-paradigm
programming in
Scala and Akka
Why not both?
You really don’t have to choose just
one.
Agenda for tonight
⊸ Demonstrate a blend of OOP and
FP in a hybrid language - Scala
⊸ Use Scala with Akka to easily
build scalable Actor Systems
⊸ Disclaimer:
▫ This is not a talk about Scala as a language, its features or its
comparison with Java.
Don’t want to do this =>
▫ As polyglot programmers, we acknowledge that some languages
are better than others for the specific kind of problems that they
are trying to solve.
▫ Scala and Java are just being used as tools to understand and
help in embracing functional programming paradigm.
➢ Why should you consider another programming
paradigm?
➢ What is the Best code?
➢ What is the Best code?
○ The following =>
➢ What is the Best code?
○ The best code is the one that doesn't exists!
Why?
○ Code rots.
○ needs maintenance.
○ needs to be tested.
○ needs to be read and understood again and again
over time.
Conciseness matters!
➢ Get all products from the orders
➢ Get all products from the orders
Or
➢ Sort the products by Id
Or
➢ Why Scala?
○ Because Scala smoothens the transition from
OOP to FP.
○ Supplements Java and adds more features and
reduces the verbosity.
○ It is not new - first introduced in 2003.
➢ Why learn Functional Programming ?
➢ Why learn Functional Programming ?
○ Write high-performing code that's easier to
understand and reason about.
○ Write programs that can utilize multiple cores
more efficiently.
○ It would evolve your way of thinking about
programs and eventually make you a better
programmer.
➢ How does FP improve code?
➢ How does FP improve code?
○ Scalable and efficient code that can utilize
multiple cores better - Map/Reduce engines.
○ Better to reason about code. No need to create
mental model or remember gradual state
changes.
○ By emphasizing on the evaluation of expressions
instead of evaluation of statements
➢ What is functional programming ?
○ Immutability.
○ Referential transparency.
○ Higher order functions.
○ Tail call recursion, mapping, reducing, currying,
lazy evaluation,...
➢ What is functional programming ?
○ Immutability.
○ Referential transparency.
○ Higher order functions.
○ Tail call recursion, mapping, reducing, currying,
lazy evaluation,...
➢ Writing code without side effects.
It is a restriction on how we write programs and not
on what programs we can express.
➢ What makes Scala functional ?
➢ Functions are 1st class citizens =>
○ Instead =>
➢ Functions are 1st class citizens =>
○ Instead =>
➢ Immutability (preferred)
○ Preventing reference reassignment through val.
○ Avoiding mutable state through immutable
collections.
■ Eg : 2 threads referring to same tree.
➢ After one thread adds a node.
○ Immutability has benefits in concurrency as
synchronization is not needed.
➢ Having referential transparency.
○ Should hold substitution model.
➢ No side effects
➢ Having referential transparency.
○ Should hold substitution model.
➢ No side effects
StringBuilder.append has side effects!
String is referentially transparent and holds
substitution model.
➢ Similarly,
add() here is also without side-effects and
referentially transparent.
➢ Function with Side Effect
○ A function has side effects if it does something
other than simply return a result like
■ Modifying a variable/data structure.
■ Throwing exception or halting abruptly.
■ Reading/writing to file/database
■ …
➢ In a pure function
○ Input is obtained only by parameters.
○ Output is calculated and returned.
➢ Just enough Scala for Akka.
➢ Case classes
○ Regular classes which export their constructor
parameters and which provide a recursive
decomposition mechanism via pattern
matching.
○ The params can be accessed with .(dot)
notation.
➢ Pattern matching
○ Switch case on steroids
➢ Pattern matching
○ A pattern match includes a sequence of
alternatives, each starting with the keyword
‘case’.
○ Each alternative case includes a pattern and
one or more expressions, which will be
evaluated if the pattern matches.
○ An arrow symbol => separates the pattern from
the expressions.
Example =>
➢ Pattern matching
Questions?
The Actor Model
⊸ Avoiding shared mutable state
▫ Functional Programming - all state is immutable
▫ Actor Model - state is mutable but encapsulated in
actors
What’s an actor?
⊸ An actor has state
⊸ An actor has behaviour
⊸ ….
Sounds similar to something else, doesn’t it?
Actors are what “objects” were supposed to be
⊸ Actors are what objects are
supposed to be (Smalltalk
objects)
⊸
What’s an actor?
⊸ An actor has state
⊸ An actor has behaviour
Similar to OOP objects but with one difference
⊸ Actors communicate by sending immutable messages
to each other
Akka - actors on the JVM
⊸ Akka actors
▫ are light-weight JVM objects
▫ are guaranteed to run on a single thread (no
locks/synchronization required)
▫ process messages sent to them in order and one at
a time
▫ do not share their state
▫ can be addressed irrespective of location
▫ asynchronous and non-blocking
What is Akka?
Akka is a toolkit and runtime for building highly
concurrent, distributed, and resilient message-driven
applications on the JVM.
Anatomy of an actor
An akka actor must have
⊸ State
⊸ Behavior
▫ Message processing
State
Processing messages
Let’s look at an actor
DEMO
Scaling out in clusters
⊸ Location transparency with ActorRef
⊸ Akka’s cluster and cluster-sharding modules
⊸ Resilience with Supervision strategies
Where to go from here
⊸ Take Martin Odersky’s course on Coursera
⊸ Try out some Lightbend Activator projects from
Github
⊸ Reach out the Akka team on Gitter and Google
Groups
Start thinking in Hybrids
Questions?

GeekNight 22.0 Multi-paradigm programming in Scala and Akka

  • 1.
  • 2.
    Why not both? Youreally don’t have to choose just one.
  • 3.
    Agenda for tonight ⊸Demonstrate a blend of OOP and FP in a hybrid language - Scala ⊸ Use Scala with Akka to easily build scalable Actor Systems
  • 4.
    ⊸ Disclaimer: ▫ Thisis not a talk about Scala as a language, its features or its comparison with Java. Don’t want to do this => ▫ As polyglot programmers, we acknowledge that some languages are better than others for the specific kind of problems that they are trying to solve. ▫ Scala and Java are just being used as tools to understand and help in embracing functional programming paradigm.
  • 5.
    ➢ Why shouldyou consider another programming paradigm?
  • 6.
    ➢ What isthe Best code?
  • 7.
    ➢ What isthe Best code? ○ The following =>
  • 8.
    ➢ What isthe Best code? ○ The best code is the one that doesn't exists! Why? ○ Code rots. ○ needs maintenance. ○ needs to be tested. ○ needs to be read and understood again and again over time. Conciseness matters!
  • 10.
    ➢ Get allproducts from the orders
  • 11.
    ➢ Get allproducts from the orders Or
  • 12.
    ➢ Sort theproducts by Id Or
  • 13.
    ➢ Why Scala? ○Because Scala smoothens the transition from OOP to FP. ○ Supplements Java and adds more features and reduces the verbosity. ○ It is not new - first introduced in 2003.
  • 14.
    ➢ Why learnFunctional Programming ?
  • 15.
    ➢ Why learnFunctional Programming ? ○ Write high-performing code that's easier to understand and reason about. ○ Write programs that can utilize multiple cores more efficiently. ○ It would evolve your way of thinking about programs and eventually make you a better programmer.
  • 16.
    ➢ How doesFP improve code?
  • 17.
    ➢ How doesFP improve code? ○ Scalable and efficient code that can utilize multiple cores better - Map/Reduce engines. ○ Better to reason about code. No need to create mental model or remember gradual state changes. ○ By emphasizing on the evaluation of expressions instead of evaluation of statements
  • 18.
    ➢ What isfunctional programming ? ○ Immutability. ○ Referential transparency. ○ Higher order functions. ○ Tail call recursion, mapping, reducing, currying, lazy evaluation,...
  • 19.
    ➢ What isfunctional programming ? ○ Immutability. ○ Referential transparency. ○ Higher order functions. ○ Tail call recursion, mapping, reducing, currying, lazy evaluation,... ➢ Writing code without side effects. It is a restriction on how we write programs and not on what programs we can express.
  • 20.
    ➢ What makesScala functional ?
  • 21.
    ➢ Functions are1st class citizens => ○ Instead =>
  • 22.
    ➢ Functions are1st class citizens => ○ Instead =>
  • 23.
    ➢ Immutability (preferred) ○Preventing reference reassignment through val. ○ Avoiding mutable state through immutable collections. ■ Eg : 2 threads referring to same tree.
  • 24.
    ➢ After onethread adds a node. ○ Immutability has benefits in concurrency as synchronization is not needed.
  • 25.
    ➢ Having referentialtransparency. ○ Should hold substitution model. ➢ No side effects
  • 26.
    ➢ Having referentialtransparency. ○ Should hold substitution model. ➢ No side effects StringBuilder.append has side effects!
  • 28.
    String is referentiallytransparent and holds substitution model.
  • 29.
    ➢ Similarly, add() hereis also without side-effects and referentially transparent.
  • 30.
    ➢ Function withSide Effect ○ A function has side effects if it does something other than simply return a result like ■ Modifying a variable/data structure. ■ Throwing exception or halting abruptly. ■ Reading/writing to file/database ■ … ➢ In a pure function ○ Input is obtained only by parameters. ○ Output is calculated and returned.
  • 31.
    ➢ Just enoughScala for Akka.
  • 32.
    ➢ Case classes ○Regular classes which export their constructor parameters and which provide a recursive decomposition mechanism via pattern matching. ○ The params can be accessed with .(dot) notation.
  • 33.
    ➢ Pattern matching ○Switch case on steroids
  • 34.
    ➢ Pattern matching ○A pattern match includes a sequence of alternatives, each starting with the keyword ‘case’. ○ Each alternative case includes a pattern and one or more expressions, which will be evaluated if the pattern matches. ○ An arrow symbol => separates the pattern from the expressions. Example =>
  • 35.
  • 38.
  • 39.
    The Actor Model ⊸Avoiding shared mutable state ▫ Functional Programming - all state is immutable ▫ Actor Model - state is mutable but encapsulated in actors
  • 40.
    What’s an actor? ⊸An actor has state ⊸ An actor has behaviour ⊸ …. Sounds similar to something else, doesn’t it?
  • 41.
    Actors are what“objects” were supposed to be ⊸ Actors are what objects are supposed to be (Smalltalk objects) ⊸
  • 42.
    What’s an actor? ⊸An actor has state ⊸ An actor has behaviour Similar to OOP objects but with one difference ⊸ Actors communicate by sending immutable messages to each other
  • 43.
    Akka - actorson the JVM ⊸ Akka actors ▫ are light-weight JVM objects ▫ are guaranteed to run on a single thread (no locks/synchronization required) ▫ process messages sent to them in order and one at a time ▫ do not share their state ▫ can be addressed irrespective of location ▫ asynchronous and non-blocking
  • 44.
    What is Akka? Akkais a toolkit and runtime for building highly concurrent, distributed, and resilient message-driven applications on the JVM.
  • 45.
    Anatomy of anactor An akka actor must have ⊸ State ⊸ Behavior ▫ Message processing
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
    Scaling out inclusters ⊸ Location transparency with ActorRef ⊸ Akka’s cluster and cluster-sharding modules ⊸ Resilience with Supervision strategies
  • 51.
    Where to gofrom here ⊸ Take Martin Odersky’s course on Coursera ⊸ Try out some Lightbend Activator projects from Github ⊸ Reach out the Akka team on Gitter and Google Groups
  • 52.
  • 53.