Scala Fundamentals

This course covers the Scala programming language and some of its more important APIs. This course focuses on the core part of Scala, and especially on its functional programming on the one hand, and on its oop capabilities on the other. The course provides its participants with the required knowledge and practical experience required for using this relatively new programming language in a practical way.

This course was developed for people with basic knowledge of software development. It can be either a programming course that was taken in the past or practical experience.

This course includes 90 academic hours delivered in 18 weekly meetings and 180 academic hours (and beyond) that take place at home. The training material (slides, video clips, assignments, solutions and code samples) for the entire course is organized on the e-learning platform we use during the course. Each meeting includes a theoretical lecture together with practical practice (at least 25% of each meeting). The practical practice includes coding by the instructor followed by the students and coding by the students with the assistance of the instructor. Each meeting is captured on video in order to allow the students an effective learning process at home. Each meeting is broadcasted online in order to allow remote participation.

The course includes lots of relatively small assignments and a final project the students will develop as an open-source project and place it on GitHub in order to allow other Kotlin developers to use it.

Meeting

Date

Topic

Sub Topics

1

Introduction
What is Scala?

Scala Advantages

Scala History

Installation

Hello World

The Scala Interpreter

IDE Plugin

Scala Basics
Define Variables

Variables Types Inference

Specifying Variable Type

Define Functions

The Unit Type

Writing Scripts

The while Loop

The if Statement

The foreach Loop

The for Loop

Scala Basic Types

Parameterize Arrays

Arrays Implementation

Arrays Short Syntax

The List Type

The ::: Operator

The :: Operator

The Nil Value

The Tuple Type

The Set Type

The Map Type

File Reading

Two Dimensions Arrays

Blocks in Scala

Multiple Lines Expressions

Lazy Evaluation

2

Classes
Class Definition

Visibility Modifiers

Method Parameters

Shorter Syntax

The Semicolon

Static Members

The this Keyword

Defining Constructors

3

Classes

Standalone Application

The fsc Compiler

Overriding Methods

The require Function

Methods Overloading

Anonymous Inner Class

Objects
Singleton Objects

4

Operators
Operatos & Methods

Arithmetic Operators

Relational Operators

Logical Operators

Bitwise Operators

Objects Comparison

Operators Precedence

Operators Associative

Operators Overloading

The unary_ Operator

5

Control Statements
The Returned Value

The if Expression

The while Loop

The do..while Loop

The for Expression

The for yield ExpressionX

The match Expression

Variables Scope

The break & continue Keywords

6

Functions
Introduction

Methods

Local Functions

Anonymous Functions

Repeated Parameters

Tail Recursion Functions

Function Type

By Names Parameters

Function Values are Objects

Anonymous Class Syntax


Closures

Introduction

What is a Closure?

Changes


Unit Testing
Introduction

The FunSuite Class

7

Inheritance
Introduction

Abstract Class

Parameter-less Methods

Extending Classes

Inheritance Meaning

Overriding Methods & Fields

Parametric Fields

Invoking Super Class Constructors

The override Keyword

Polymoprphism

Final Class

Final Method

8

Traits
Introduction

Traits Definition

Traits Multiple Inheritance

9

Packages
Introduction

The Java Global Hierarchy

The Default Package

The Package Statement

Reverse Domain Name Convention

Nested Packages

Packages Hiding

The import Statement

The import Selector Clause

Automatic Imports

Assertions
Introduction

The assert Method

The @elidable Annotation

Exceptions
Introduction

Throwing Exceptions

Catching Exceptions

The finally Block

10

Patterns Matching
Introduction

The match Statement

Logical Operators

Typed Pattern

Functional Patterns Matching

Case Classes

Patterns Matching

Case Classes

11

Scala Hierarchy
The Scala.Any Class

The Scala.AnyRef Class

The Scala.AnyVal Class

The Hierarchy

Primitive Type Values

The Nothing Type

The Nil Object

The Null Type

The Option Type

The None Object

The Nothing Class

The Some Class

The Map Collection


Collection

Introduction

The Iterable Trait

The Iterator Trait

Sequences

Lists

Sets

Maps

Range

Tuples

Options

12

Lists
Introduction

List Literals

List of Lists

Empty List

The List Type

List Operations

List Transformations

List Filtering

List Reduce

List Folding

Simple List Generating

Sets

Introduction

The ++ Operators

The min and max Methods

The & Operator

The + and - Operators

                                                                                                                                                                                                                                                                                                                                                                     

13

Tuples
Introduction

The Tuple Class

Different Types

Accessing Elements

The productIterator Method

The swap Method

Using Tuples


Maps
Introduction

The += Operator

The keys Method

The values Method

The isEmpty Method

The ++ Operatpor

Treating Map as Arrauys

The contains Method

The - Operator

The size Methos

                                                                                                                                                                                                                                                                                           

14

Ranges
Introduction

Jump Start

The toList Method

Options
Introduction

The None Object

The Nothing Type

The Some Class

Code Samples

The getOrElse Method

The isEmpty Method

15

Types Parameterization
Introduction

Code Sample

Generic Functions

Type Bounds

Covariance

Generic Wild Card

Abstract Members
Introduction

Abstract Types

Abstract Vals

Abstract Vars

Abstract Method

Properties
Introduction

Object Properties

Code Samples

16

Types Conversions
Introduction

Implicit Casting

Explicit Casting

Structural Types


Annotations
Introduction

The @deprecated Annotation

The @throws Annotation

The @SerialVersionUID Annotation

The @Cloneable Annotation

The @Native Annotation

The @Serializable Annotation

The @Transient Annotation

The @Volatile Annotation

The @BeanProperty Annotation

The @BooleanBeanProperty Annotation

The @Uncheck Annotation

The @varargs  Annotation

Scala & XML
Introducion

XLM Serialization

XML Generating

XML Parsing

17

Objects Comparisons
Introduction

The eq Operator

The ne Operator

The equals Method

Case Classes

Comparing Strings

Comparing Value Type Values

The hashCode Function

The == Operator

Java Integration
Introduction
Using Scala from Java
Class Variables
Beans Properties
Using Java from Scala
Traits are Interfaces
Exceptions Handling
Static Members
Closures
Annotations
Varied Number of Arguments

18

Concurrency
Introduction
The Runnable Trait
The Executors Object
The Future Trait
Synchronization