Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency...

22
Real-World Functional Programming James Earl Douglas @jearldouglas Kelley Robinson @kelleyrobinson bit.ly/real-world-fp

Transcript of Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency...

Page 1: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Real-World Functional Programming

James Earl Douglas@jearldouglas

Kelley Robinson@kelleyrobinson

bit.ly/real-world-fp

Page 2: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Key Concepts

● Statelessness

● Immutable data

● Referential transparency

Characteristics that differentiate functional programming

Page 3: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Statelessness

function add(a,b) { return a + b;}

var x = add(1,1) // 2var y = add(1,1) // 2var z = add(1,1) // 2

add always returns the same output for a given input

Page 4: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Immutable data

var x = “hello” // “hello”

var y = x + “, world” // “hello, world”

var z = y.substring(0,5) // “hello”

Page 5: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Referential transparency

var x = 1● x is a synonym for 1

var y = x + 1● y is a synonym for x + 1

● y is also a synonym for 2

x = 2● This is a lie, equivalent to 1 = 2

Page 6: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Benefits

● Easily abstractable

● Applications become modular and composable

● Encourages code reuse

Why you should use functional programming

Page 7: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

We had a problem . . .

Page 8: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Architectural issues

● Locked into using one data structure

● Clumsy persistent data model

● Bottlenecked deployment

Existing API design had limitations

Page 9: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Let’s refactorUsing functional concepts to solve our problems.

Page 10: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Example - ATM

Page 11: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Withdraw - bad!

Page 12: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

function withdraw(amount) { if (balance >= amount) { balance = balance - amount return amount } else { return 0 }}

Withdraw - bad!

Page 13: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Withdraw - good!

Page 14: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

function withdraw(amount) { return function(balance) { if (balance >= amount) { return [amount, balance - amount] } else { return [0, balance] } }}

Withdraw - good!

Page 15: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Check balance

Page 16: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Generate report

Page 17: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Generate report(in Spanish)

Page 18: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Withdraw - in Bitcoin

Page 19: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

function convertToBtc(withdrawal) { return function(balance) { var result = withdrawal(balance) // [amount, new balance] var inBtc = result[0] / 575.0 var fee = result[0] * 0.01 return [inBtc, result[1] - fee] }}

var get20InBtc = convertToBtc(withdraw(20))

Withdraw - in Bitcoin

Page 20: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Live code time

bit.ly/real-world-fp

Page 21: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Benefits

● Easily abstractable

● Applications become modular and composable

● Encourages code reuse

Why you should use functional programming

Page 22: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)

Thank [email protected]@kelleyrobinson

[email protected]@jearldouglas

bit.ly/real-world-fp