48
FP in Scala Enero 2015

Functional programming in scala

  • Upload
    stratio

  • View
    621

  • Download
    3

Embed Size (px)

Citation preview

FP in Scala

Enero 2015

WHY FP?

• FP Concepts

• FP “powers”

1 2 3FP IN SCALA: THE BASICS

• Mutability vs

Immutability

• HOFs

• Functions = First-class

citizens

FP TOOLS

• For-comprehension

(desugaring)

• Try & Either

ÍNDICE

WHY FP?1

Functional Programming in Scala

1.1 FP Concepts: Pure Function

A function of type A => B maps every value of type A to exactly

one value of type B

And does nothing else

“Nothing else” = Side effects: Modifying a data structure, setting a field on a object, throwing an exception,

printing to the console, reading from or writing to a file

1 WHY FP?

Functional Programming in Scala

1.1 FP Concepts: Referential transparency

1 WHY FP?

If you have an expression, this expression is RT if you can evaluate it and then replace this expression with the value that you get

A function is pure if f(x) is RT when x is RT

Functional Programming in Scala

1.1 FP Concepts: Scala is not a purely functional language!!

1 WHY FP?

Functional Programming in Scala

1.2 FP “Powers”: Testability

1 WHY FP?

Functional Programming in Scala

1.2 FP “Powers”: Testability

1 WHY FP?

Functional Programming in Scala

1.2 FP “Powers”: Testability

1 WHY FP?

Functional Programming in Scala

1.2 FP “Powers”: Testability

1 WHY FP?

Functional Programming in Scala

1.2 FP “Powers”: Reusability

1 WHY FP?

Functional Programming in Scala

1.2 FP “Powers”: Reusability

1 WHY FP?

Functional Programming in Scala

1.2 FP “Powers”: Reusability

1 WHY FP?

Functional Programming in Scala

1.2 FP “Powers”: Reusability

1 WHY FP?

Functional Programming in Scala

1.2 FP “Powers”: Reusability

1 WHY FP?

Functional Programming in Scala

1.2 FP “Powers”: Parallelizability

1 WHY FP?

Functional Programming in Scala

1.2 FP “Powers”: Comprehension

1 WHY FP?

FP IN SCALA:THE BASICS2

Functional Programming in Scala

2.1 Mutability vs Immutability

2 FP IN SCALA: THE BASICS

Functional Programming in Scala

2.1 Mutability vs Immutability

2 FP IN SCALA: THE BASICS

Functional Programming in Scala

2.1 Mutability vs Immutability

2 FP IN SCALA: THE BASICS

Functional Programming in Scala

2.1 Mutability vs Immutability

2 FP IN SCALA: THE BASICS

All the classes that mix-in this trait should be in this file

A is covariant

Functional Programming in Scala

2.1 Mutability vs Immutability

2 FP IN SCALA: THE BASICS

Variadic function syntax

Tail call annotation

Functional Programming in Scala

2.2 Higher Order Functions

2 FP IN SCALA: THE BASICS

Functional Programming in Scala

2.3 Functions = First-class citizens

2 FP IN SCALA: THE BASICS

Method

Function

Functional Programming in Scala

2.3 Functions = First-class citizens

2 FP IN SCALA: THE BASICS

Function literal

Function value

FP TOOLS3

Functional Programming in Scala

3.1 For-comprehension

3 FP TOOLS

Functional Programming in Scala

3.1 For-comprehension

3 FP TOOLS

Functional Programming in Scala

3.1 For-comprehension

3 FP TOOLS

Functional Programming in Scala

3.1 For-comprehension

3 FP TOOLS

Functional Programming in Scala

3.1 For-comprehension

3 FP TOOLS

Functional Programming in Scala

3.1 For-comprehension

3 FP TOOLS

Functional Programming in Scala

3.1 For-comprehension

3 FP TOOLS

flatMap

Functional Programming in Scala

3.1 For-comprehension

3 FP TOOLS

http://docs.scala-lang.org/tutorials/FAQ/yield.html

Functional Programming in Scala

3.1 For-comprehension

3 FP TOOLS

Functional Programming in Scala

3.1 For-comprehension

3 FP TOOLS

Functional Programming in Scala

3.1 For-comprehension

3 FP TOOLS

Functional Programming in Scala

3.1 For-comprehension

3 FP TOOLS

Functional Programming in Scala

3.1 For-comprehension

3 FP TOOLS

What else??

Monads!!!

Future

Try

IterateeRDD

(warning!)

...

Functional Programming in Scala

3.2 Try & Either

3 FP TOOLS

Alternatives to “pure” exceptions

Why?

1º. Exceptions break RT

2º. Exceptions are NOT type-safe

Functional Programming in Scala

3.2 Try & Either

3 FP TOOLS

Functional Programming in Scala

3.2 Try & Either

3 FP TOOLS

//Awesome Dataviiiiiis code ;)

Functional Programming in Scala

3.2 Try & Either

3 FP TOOLS

//Awesome Dataviiiiiis code ;)

Functional Programming in Scala

3.2 Try & Either

3 FP TOOLS

Functional Programming in Scala

Functional Programming in Scala

Functional way “powers” => Testability, Reusability, Parallelizability,

Comprehension

Immutability & HOFs

For-comprehension => map, flatMap, filter

Functional way => Handling exceptions