About the course:
Our Advanced Scala programming training course is aimed at existing Scala developers who are looking to improve the functionality and performance of their Scala applications.
This hands-on Scala course will improve your skills in Pattern Matching with Scala, take your Functional Programming to the next level, and leverage the Type system too.
We're happy to talk to you about your team's specific requirements, so if you're potentially interested in a custom course which takes into account your team's existing skills, your project requirements and use cases, let us know so we can put together a syllabus which focuses on providing the best value to your business.
By the end of this course, you will have learnt:
- How to use Scala's type system to write better code
- More about functional programming, including how to handle exceptions functionally
- How to use more advanced features of pattern matching
- What implicits are, and how Scala uses them
Who should attend
Developers who are already familiar with Scala, who need to understand some of the more advanced features of the language.
Prerequisites
A familiarity with writing and running Scala code, along with topics such as the basics of functional Scala, pattern matching and traits.
Live, instructor-led online and on-site training
We appreciate that you need flexibility to fit in with new working situations - whether you're an individual, part of a distributed team, or simply have projects and deadlines to meet.
Our remote training can take place online in a virtual classroom, with content split into modules to accommodate your scheduling challenges and meet your learning goals. Get in touch today to find out how we can help design a cost-effective, flexible training solution.
As soon as it's safe, we'll return to also offering the on-site custom training courses and programmes upon which we've built our reputation.
Course Overview
- Welcome and Introductions
- Plan for Course
Working with Traits
- Trait Inheritance
- Trait Executable Behaviour
- Dynamically mixing Traits
- Trait Dependencies
- Single Abstract Method Traits
- Stackable traits
- Traits and the Strategy Pattern
- Universal Traits
Working with Types
- What constitutes a Type?
- Defining Custom Types
- Nested types
- Path Dependent types
- Sealed Types
- Type Parameterization
- Variance
- Invariant, Covariance, Contravariance
- Bounded Types
Functional Programming
- Functions reviewed
- Closures
- Functions and methods
- Tail Recursive Functions
- Partially Applied Functions
- Currying
- Partial Functions
- Lazy Evaluation
- Pass by Value v Pass by Reference
Higher Order Functions and Collections
- Introduction Higher Order Functions
- Functions as Parameters
- Using types for function definitions
- Functions as Return results
- Collection Higher Order Functions
- foreach, map, filter, foldLeft, foldRight, flattern, flatMap
- Working with Streams
- Using LazyLists
Close of Day Discussion and Q&A
Day 2
Scala Reflection
- Reflection
- Problems with java Reflection
- Scala Manifests
- Scala Reflection
- Type tags
- Scala Reflection Instance Creation
- Runtime type Information
- ClassTags
Advanced Pattern Matching
- Pattern matching review
- Using Guards with case statements
- Pattern matching with case classes
- Deep Matching
- Extractors
- Pattern Binders in Pattern Matching
- Option, Some and None
- Option and Pattern matching
Implicits
- Implicit Conversions
- Implicit Classes
- Implicit Parameters
- Implicit Objects
- Context bounds
- Type Class Pattern
- View Bounds (deprecated)
- The ??? method
Functional Exception Handling
- Errors & Exceptions
- Traditional Exception Handling
- Limitations with approach
- Functional Exception Handling
- Recovering from Exceptions Functionally
- Defining new Exception types
Close of Course Discussion and Q&A
Optional Module (which replace core modules)
Akka Actors
- What is the need for Actors?
- The Actor Model
- Actor Concepts
- Actor Communications
- Akka Actors
- Akka Actor Application Structure and Naming
- Actor DSL (Domain Specific Language)
- Actor traits
- Actor Incarnation
- Dispatching Actors
Actor Lifecycle, Configuration and Dispatchers
- Actor Lifecycle
- Lifecycle Methods
- Property Configuration Factory Pattern
- Passing Parameters to Actor Constructors
- Akka Configuration
- Dispatchers
- Actors and Parallelism
- Using the Thread Pool Dispatcher
Futures and Promises
- Why Asynchronous Programming
- Futures
- Scala Futures
- Futures and Completion (success and failure)
- Promises
- Scala Promises
Functional Design Patterns
- Functors
- Applicative Functors
- Monoids
- Monads
- Zippers
- Lenses
- Arrows