Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
Introduction to Programming in
Scala
May 4th, 2017
Hungai Amuhinda
@hungai
hungaikev
hungaikev.in
hungaikevin@gmail.com
Agenda
❖ Introduction
❖ Scala Concepts
❖ OOP
❖ FP
❖ Collections
Scala:
Scala is a Java like programming
language which unifies object - oriented
and functional programming.
Scala Concepts
● Scala is an object oriented language in pure form: every
value is an object and every operator is a metho...
Scala Concepts
● Everything is an expression
● Expression is an instruction to execute something that
will return a value....
Scala Class Hierarchy
scala.Any
scala.AnyVal scala.AnyRef
scala.Int
scala.Byte
scala.Boolean
scala.Char
scala.Stringscala....
Scala Data Types
● Boolean
● Byte
● Short
● Int
● Long
SCAVANNAH 2017
● Float
● Double
● Char
● String
Scala
Concepts(Advanced
Type System)
● Static
● Inferred (Type Inference)
● Structural
● Strong
SCAVANNAH 2017
Program with Scala (REPL)
Read Evaluate Print Loop
$ scala
Demo 03 SCAVANNAH 2017
Program with Scala (REPL)
Read Evaluate Print Loop
$ scala -Dscala.color
Demo 04 SCAVANNAH 2017
Program with Scala
(Worksheet)
Work with worksheets
● IntelliJ
● Scala IDE or Eclipse
with Scala Plugin
● Ensime
Demo 04 S...
Program with Scala (Main)
object Demo1 {
def main (args: Array[String]): Unit = {
println(“Hello Everyone”)
println(“Welco...
Program with Scala (App)
object Demo2 extends App {
val todaysEvent = “Scavannah”
lazy val fun = (0 to 4).map(x => “fun”)....
Scala Concepts
SCAVANNAH 2017
❖ var, val
❖ If expressions
❖ def
❖ Block expressions
❖ While - Loops
❖ For - Loops
❖ Nested...
Scala Concepts
❖ var - variable
Something that is able or
likely to change or be
changed (Mutable)
Demo 05 SCAVANNAH 2017
...
Expression with Semicolon?
val x = 5566
val y = 87
val java = “Java” ; val scala = “scala”
Demo 06 SCAVANNAH 2017
If you h...
If Expressions
❖ If has return value (expression)
❖ Scala has no ternary operator (? : )
val value = 0
val negative =
Demo...
def
def max (x: Int, y: Int): Int = {
If (x > y) x else y
}
Demo 08 SCAVANNAH 2017
Function body in Curly braces
Equals si...
def
Demo 09 SCAVANNAH 2017
def max (x: Int, y: Int): Int = {
If (x > y)
return x
else
return y
}
def
Demo 010 SCAVANNAH 2017
def max (x: Int, y: Int) = {
If (x > y)
x
else
y
}
No Result type
def
Demo 011 SCAVANNAH 2017
def max (x: Int, y: Int) =
If (x > y)
x
else
y
No Curly brackets
Summary of def
❖ You don't need a return statement
- Last expression of a block will be the return value
❖ You don't need ...
Block expressions (Curly brackets)
val n = 5
val factorial = {
var result = 1
for (i <- 1 to n )
result = result * i
resul...
While Loop
var n = 10
var sum = 0
while (n > 0) {
sum = sum + 1
n = n - 1
}
Demo 013 SCAVANNAH
For - Loop
Demo 014 SCAVANNAH
var sum = 0
for (i <- 1 to 10) {
sum += 1
}
println(sum)
Nested Function
def min (x: Int, y: Int): Int = {
def max (x: Int, y: Int) = {
if (x > y)
x
else
y
}
if (x >= max(x,y)) y ...
Recursion vs Tail Recursion
Recursion vs Tail - recursion
def factorial(n : Int): BigInt = {
If (n == 0) 1
else
n * factorial(n - 1)
}
factorial (15)
...
Recursion vs Tail - recursion
def factorial(n : Int): BigInt = {
def helpFunction(acc : Int, n: Int) : BigInt = {
If (n ==...
Recursion vs Tail - recursion
import scala.annotation.tailrec
def factorial(n : Int): BigInt = {
@tailrec
def helpFunction...
Pattern Matching
❖ Pattern matching is a feature that is very common in functional
languages
❖ It matches a value against ...
Pattern Matching
def matchString(x : String): String = {
x match {
case “Dog” => x
case “Cat” => “Not a cat person”
case _...
OOP
Scala (Object Oriented)
SCAVANNAH 2017
❖ Classes
❖ Extends , with, override
❖ Abstract classes
❖ Objects, Companion
object...
Classes
class Employee(id : Int, val name: String, address: String, var salary: Long
)
val employee = new Employee(1,”Hung...
Extends, with, override.
❖ Scala is single inheritance like Java.
❖ Scala - extends = Java - extends
❖ Scala - with = Java...
Abstract classes.
❖ Abstract classes are just like normal classes but can have abstract
methods and abstract fields
❖ In s...
Abstract classes.
abstract class Animal (val name: String) {
val footNumber: Int
val fly : Boolean
def speaks : Unit
}
cla...
Objects.
❖ A singleton object is declared using the object keyword.
❖ When a singleton object shares the same name with a ...
Singleton Object.
object MathUtil {
def doubleHalfUp(precision: Int, origin: Double): Double {
val tmp = Math.pow(10,preci...
Case Classes.
Case classes are just regular classes that are :
➔ Immutable by default
➔ Decomposable through pattern match...
Case classes.
abstract class Notification
case class Email(sourceEmail: String, title: String, body: String) extends Notif...
FP
The Lambda Calculus.
Demo 012 SCAVANNAH
Alonzo Church 1930
❖ Theoretical foundation
❖ Pure functions - no state
❖ Not a pr...
Lambda Calculus.
ƛx . x + 1
SCAVANNAH
ExpressionsVariable
Function Application
Lambda Calculus.
ƛx . x + 1
// Scala Translation
{ x : Int => x + 1 }
Demo 024 SCAVANNAH
Scala (Functional)
SCAVANNAH 2017
❖ Functional Concepts
❖ First class functions
❖ Anonymous functions
❖ Higher order funct...
Functional Concepts.
❖ Immutability (Referential Transparency - Expressions always evaluates to
the same result in any con...
Anonymous functions (Lambdas).
Demo 012 SCAVANNAH
Anonymous functions.
((x : Int ) => x * x)
(0 until 10).map ((value: Int) => value * value)
(0 until 10).map (value => val...
High-order Functions.
def calculateTax(rate: BigDecimal => BigDecimal, salary: BigDecimal) : BigDecimal = {
rate(salary)
}...
High-order Functions.
def calculateTax(rate: BigDecimal => BigDecimal, salary: BigDecimal) : BigDecimal = {
rate(salary)
}...
High-order Functions.
def calculateTax(rate: BigDecimal => BigDecimal) : (BigDecimal ) => BigDecimal = {
rate
}
def kenyaT...
High-order Functions - Curry.
def calculateTax(rate: BigDecimal => BigDecimal) (salary : BigDecimal ) : BigDecimal =
{
rat...
Collections
Collections
❖
SCAVANNAH
❖ Concept of Collections
❖ Hierarchy of Collections
- Immutable
- Mutable
❖ Immutable List
Collections.
❖ Scala supports mutable collections and immutable collections.
❖ A mutable collection can be updated or exte...
Collections Hierarchy
SCAVANNAH
Hierarchy of Immutable Collections
SCAVANNAH
Hierarchy of mutable Collections
SCAVANNAH
Immutable List
// Construct a List
val list1 = List(1,2,3)
val list2 = 1 :: 2 :: 3 :: 4 :: 5 :: Nil
val list3 = List(“appl...
Immutable List (API)
val list = List(4,3,0,1,2)
➔ list.head
➔ list.tail
➔ list.length
➔ list.max
➔ list.min
➔ list.sum
➔ l...
Summary of Scala.
❖ Keep it simple
❖ Don’t pack too much in one expression
❖ Find meaningful names
❖ Prefer functional
❖ C...
Further Reading $ References.
❖ Scala Official Docs
❖ Cousera - Martin Odesky
❖ Creative Scala
❖ Scala School by Twitter
❖...
Q & A
Próxima SlideShare
Cargando en…5
×

Introduction to programming in scala

332 visualizaciones

Publicado el

Introduction to programming presentation did for Scavannah

Publicado en: Software
  • Sé el primero en comentar

Introduction to programming in scala

  1. 1. Introduction to Programming in Scala May 4th, 2017
  2. 2. Hungai Amuhinda @hungai hungaikev hungaikev.in hungaikevin@gmail.com
  3. 3. Agenda ❖ Introduction ❖ Scala Concepts ❖ OOP ❖ FP ❖ Collections
  4. 4. Scala: Scala is a Java like programming language which unifies object - oriented and functional programming.
  5. 5. Scala Concepts ● Scala is an object oriented language in pure form: every value is an object and every operator is a method. ● “ + ”, “ - ”, “ * ”, “ / ” are all methods SCAVANNAH 2017
  6. 6. Scala Concepts ● Everything is an expression ● Expression is an instruction to execute something that will return a value. ● An expression evaluates to a result or results in a value SCAVANNAH 2017
  7. 7. Scala Class Hierarchy scala.Any scala.AnyVal scala.AnyRef scala.Int scala.Byte scala.Boolean scala.Char scala.Stringscala.List scala.Seq scala.Map
  8. 8. Scala Data Types ● Boolean ● Byte ● Short ● Int ● Long SCAVANNAH 2017 ● Float ● Double ● Char ● String
  9. 9. Scala Concepts(Advanced Type System) ● Static ● Inferred (Type Inference) ● Structural ● Strong SCAVANNAH 2017
  10. 10. Program with Scala (REPL) Read Evaluate Print Loop $ scala Demo 03 SCAVANNAH 2017
  11. 11. Program with Scala (REPL) Read Evaluate Print Loop $ scala -Dscala.color Demo 04 SCAVANNAH 2017
  12. 12. Program with Scala (Worksheet) Work with worksheets ● IntelliJ ● Scala IDE or Eclipse with Scala Plugin ● Ensime Demo 04 SCAVANNAH 2017
  13. 13. Program with Scala (Main) object Demo1 { def main (args: Array[String]): Unit = { println(“Hello Everyone”) println(“Welcome to today's event”) } } Demo 01 SCAVANNAH 2017
  14. 14. Program with Scala (App) object Demo2 extends App { val todaysEvent = “Scavannah” lazy val fun = (0 to 4).map(x => “fun”).mkString(“ ”) println(“Hello world”) println(“Welcome to ” + todaysEvent + “! n”) } Demo 02 SCAVANNAH 2017
  15. 15. Scala Concepts SCAVANNAH 2017 ❖ var, val ❖ If expressions ❖ def ❖ Block expressions ❖ While - Loops ❖ For - Loops ❖ Nested Function ❖ Recursion vs Tail recursion ❖ Pattern Matching
  16. 16. Scala Concepts ❖ var - variable Something that is able or likely to change or be changed (Mutable) Demo 05 SCAVANNAH 2017 ❖ val - value A value is an expression that cannot be changed any further (Wiki) (Immutable) It's similar to final in Java
  17. 17. Expression with Semicolon? val x = 5566 val y = 87 val java = “Java” ; val scala = “scala” Demo 06 SCAVANNAH 2017 If you have multiple expressions in one line, you will need semicolons(;). Otherwise you don't need it.
  18. 18. If Expressions ❖ If has return value (expression) ❖ Scala has no ternary operator (? : ) val value = 0 val negative = Demo 07 SCAVANNAH 2017 If (value < 0 ) true else false Everything is an expression
  19. 19. def def max (x: Int, y: Int): Int = { If (x > y) x else y } Demo 08 SCAVANNAH 2017 Function body in Curly braces Equals sign Result type of function Parameters Function name “def” starts a function definition
  20. 20. def Demo 09 SCAVANNAH 2017 def max (x: Int, y: Int): Int = { If (x > y) return x else return y }
  21. 21. def Demo 010 SCAVANNAH 2017 def max (x: Int, y: Int) = { If (x > y) x else y } No Result type
  22. 22. def Demo 011 SCAVANNAH 2017 def max (x: Int, y: Int) = If (x > y) x else y No Curly brackets
  23. 23. Summary of def ❖ You don't need a return statement - Last expression of a block will be the return value ❖ You don't need return type in method or function definition. - Scalac will infer your return type in most cases. Its a good habit to have a return type, especially if your API has a public interface ❖ You don't need curly brackets - If you have multiple lines of code, using curly brackets ({ }) is a good habit SCAVANNAH 2017
  24. 24. Block expressions (Curly brackets) val n = 5 val factorial = { var result = 1 for (i <- 1 to n ) result = result * i result } Demo 012 SCAVANNAH Last expression (result) in block will be the return value, then it will be assign result to “factorial”
  25. 25. While Loop var n = 10 var sum = 0 while (n > 0) { sum = sum + 1 n = n - 1 } Demo 013 SCAVANNAH
  26. 26. For - Loop Demo 014 SCAVANNAH var sum = 0 for (i <- 1 to 10) { sum += 1 } println(sum)
  27. 27. Nested Function def min (x: Int, y: Int): Int = { def max (x: Int, y: Int) = { if (x > y) x else y } if (x >= max(x,y)) y else x } Demo 015 SCAVANNAH
  28. 28. Recursion vs Tail Recursion
  29. 29. Recursion vs Tail - recursion def factorial(n : Int): BigInt = { If (n == 0) 1 else n * factorial(n - 1) } factorial (15) factorial (150) factorial(15000) // java.lang.StackOverflowError Demo 016 SCAVANNAH
  30. 30. Recursion vs Tail - recursion def factorial(n : Int): BigInt = { def helpFunction(acc : Int, n: Int) : BigInt = { If (n == 0) acc else helpFunction(acc * n , n -1 ) } helpFunction(1,n) } factorial(15000) Demo 017 SCAVANNAH “Tail - Recursion”
  31. 31. Recursion vs Tail - recursion import scala.annotation.tailrec def factorial(n : Int): BigInt = { @tailrec def helpFunction(acc : Int, n: Int) : BigInt = { If (n == 0) acc else helpFunction(acc * n , n -1 ) } helpFunction(1,n) } factorial(15000) Demo 018 SCAVANNAH “You have to add a return type, when the function is recursive” “Add annotation is a good habit. Compiler can check whether or not it can be optimised. ”
  32. 32. Pattern Matching ❖ Pattern matching is a feature that is very common in functional languages ❖ It matches a value against an expression ❖ Each pattern points to an expression ❖ It's similar to “switch case” but its more general. There are some differences: - No fall through - Each condition needs to return a value(Everything in scala is an expression) - It can match anything SCAVANNAH 2017
  33. 33. Pattern Matching def matchString(x : String): String = { x match { case “Dog” => x case “Cat” => “Not a cat person” case _ => “Neither Dog or Cat” } matchString(“Dog”) matchString(“Human”) Demo 019 SCAVANNAH
  34. 34. OOP
  35. 35. Scala (Object Oriented) SCAVANNAH 2017 ❖ Classes ❖ Extends , with, override ❖ Abstract classes ❖ Objects, Companion objects ❖ Traits ❖ Case classes
  36. 36. Classes class Employee(id : Int, val name: String, address: String, var salary: Long ) val employee = new Employee(1,”Hungai”,”Kakamega”,40L) Demo 020 SCAVANNAH Primary Constructor val in constructor will give you a getter var in constructor will give you a getter and setter
  37. 37. Extends, with, override. ❖ Scala is single inheritance like Java. ❖ Scala - extends = Java - extends ❖ Scala - with = Java - implements ❖ Scala - override = Java - @Override SCAVANNAH Single inheritance enables a derived class to inherit properties and behaviour from a single parent class
  38. 38. Abstract classes. ❖ Abstract classes are just like normal classes but can have abstract methods and abstract fields ❖ In scala, you don't need the keyword abstract for methods and fields in an abstract class SCAVANNAH
  39. 39. Abstract classes. abstract class Animal (val name: String) { val footNumber: Int val fly : Boolean def speaks : Unit } class Dog(name: String) extends Animal (name) { override val footNumber : Int = 4 override val fly = false override def speak : Unit = println(“Spark”) } class Bird(name : String) extends Animal(name) { override val footNumber : Int = 2 override val fly = true override def speaks: Unit = println(“chatter”) } Demo 021 SCAVANNAH Subclasses should be in the same file.
  40. 40. Objects. ❖ A singleton object is declared using the object keyword. ❖ When a singleton object shares the same name with a class it's referred to as a Companion object. ❖ A companion object and its classes can access each others private methods or fields SCAVANNAH
  41. 41. Singleton Object. object MathUtil { def doubleHalfUp(precision: Int, origin: Double): Double { val tmp = Math.pow(10,precision) Math.round(origin * tmp)/ tmp } } Demo 022 SCAVANNAH
  42. 42. Case Classes. Case classes are just regular classes that are : ➔ Immutable by default ➔ Decomposable through pattern matching ➔ Compared by structural equality instead of by reference. When you declare a case class the scala compiler does the following for you: ➔ Creates a class and its companion object ➔ Implements the ‘apply’ method that you can use a factory. This lets you create instances of the class without the ‘new’ keyword SCAVANNAH
  43. 43. Case classes. abstract class Notification case class Email(sourceEmail: String, title: String, body: String) extends Notification. case class SMS (sourceNumber: String, message: String) extends Notification. case class VoiceRecording(contactName: String, link: String) extends Notification. val emailNotification = Email(“h@hungaikev.in”,”Scavannah”,”Todays lesson”) println(emailNotification) Demo 023 SCAVANNAH
  44. 44. FP
  45. 45. The Lambda Calculus. Demo 012 SCAVANNAH Alonzo Church 1930 ❖ Theoretical foundation ❖ Pure functions - no state ❖ Not a programming language
  46. 46. Lambda Calculus. ƛx . x + 1 SCAVANNAH ExpressionsVariable Function Application
  47. 47. Lambda Calculus. ƛx . x + 1 // Scala Translation { x : Int => x + 1 } Demo 024 SCAVANNAH
  48. 48. Scala (Functional) SCAVANNAH 2017 ❖ Functional Concepts ❖ First class functions ❖ Anonymous functions ❖ Higher order functions
  49. 49. Functional Concepts. ❖ Immutability (Referential Transparency - Expressions always evaluates to the same result in any context) - No side effects (Modifies state, Not predictable) ❖ Functions as values - Functions as objects ❖ Higher order functions - Input: Takes one or more functions as parameters, Output: Returns a function as result Demo 012 SCAVANNAH
  50. 50. Anonymous functions (Lambdas). Demo 012 SCAVANNAH
  51. 51. Anonymous functions. ((x : Int ) => x * x) (0 until 10).map ((value: Int) => value * value) (0 until 10).map (value => value * value ) (0 until 10).map (value => value + 1) (0 until 10).map (_ + 1) Demo 025 SCAVANNAH
  52. 52. High-order Functions. def calculateTax(rate: BigDecimal => BigDecimal, salary: BigDecimal) : BigDecimal = { rate(salary) } val kenyaTax = (salary: BigDecimal) => { if (salary > 413201) salary * 0.396 else salary * 0.3 } val tzTax: BigDecimal => BigDecimal = _ * 0.25 calculateTax(kenyaTax,413201) calculateTax(tzTax,100) Demo 026 SCAVANNAH
  53. 53. High-order Functions. def calculateTax(rate: BigDecimal => BigDecimal, salary: BigDecimal) : BigDecimal = { rate(salary) } def kenyaTax (salary: BigDecimal) = { calculateTax(x => if (salary > 413201) salary * 0.396 else salary * 0.3, salary ) } def tzTax(salary: BigDecimal ) = calculateTax( _ * 0.25, salary) kenyaTax(413202) tzTax(100) Demo 027 SCAVANNAH
  54. 54. High-order Functions. def calculateTax(rate: BigDecimal => BigDecimal) : (BigDecimal ) => BigDecimal = { rate } def kenyaTax = calculateTax(x => if (x > 413201) x * 0.396 else x * 0.3 ) def tzTax = calculateTax( x => x * 0.25) kenyaTax(413202) tzTax(100) calculateTax(kenyaTax)(413202) calculateTax(tzTax)(100) Demo 028 SCAVANNAH
  55. 55. High-order Functions - Curry. def calculateTax(rate: BigDecimal => BigDecimal) (salary : BigDecimal ) : BigDecimal = { rate (salary) } def kenyaTax(salary : BigDecimal) = calculateTax(x => if (x > 413201) x * 0.396 else x * 0.3 )(salary) def tzTax(salary : BigDecimal) = calculateTax( x => x * 0.25)(salary) kenyaTax(413202) tzTax(100) Demo 029 SCAVANNAH
  56. 56. Collections
  57. 57. Collections ❖ SCAVANNAH ❖ Concept of Collections ❖ Hierarchy of Collections - Immutable - Mutable ❖ Immutable List
  58. 58. Collections. ❖ Scala supports mutable collections and immutable collections. ❖ A mutable collection can be updated or extended in place. This means you can change, add or remove elements as a side effect. ❖ Immutable collections never change. You have still operations that stimulate additions, removals, updates by creating a new collection and leave the old unchanged. SCAVANNAH
  59. 59. Collections Hierarchy SCAVANNAH
  60. 60. Hierarchy of Immutable Collections SCAVANNAH
  61. 61. Hierarchy of mutable Collections SCAVANNAH
  62. 62. Immutable List // Construct a List val list1 = List(1,2,3) val list2 = 1 :: 2 :: 3 :: 4 :: 5 :: Nil val list3 = List(“apples”, “oranges”,”bananas”) val list4 = List(5,5,6,6) ::: List(8,7) Demo030 SCAVANNAH Pronounced “cons”
  63. 63. Immutable List (API) val list = List(4,3,0,1,2) ➔ list.head ➔ list.tail ➔ list.length ➔ list.max ➔ list.min ➔ list.sum ➔ list.contains(2) ➔ list.drop ➔ list.reverse Demo031 SCAVANNAH ➔ list.sortWith(_ > _) ➔ list.map(x => x * 2) ➔ list.map(_ * 2) ➔ list.reduce((x,y) => x + y) ➔ list.filter(_ % 2 == 0) ➔ list.groupBy(x => x % 2 == 0)
  64. 64. Summary of Scala. ❖ Keep it simple ❖ Don’t pack too much in one expression ❖ Find meaningful names ❖ Prefer functional ❖ Careful with mutable objects SCAVANNAH
  65. 65. Further Reading $ References. ❖ Scala Official Docs ❖ Cousera - Martin Odesky ❖ Creative Scala ❖ Scala School by Twitter ❖ Scala 101 by Lightbend SCAVANNAH
  66. 66. Q & A

×