programming real-world functional - james earl douglasimmutable data referential transparency...
TRANSCRIPT
![Page 1: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/1.jpg)
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)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/2.jpg)
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)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/3.jpg)
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)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/4.jpg)
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)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/5.jpg)
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)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/6.jpg)
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)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/7.jpg)
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)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/8.jpg)
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)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/9.jpg)
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)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/10.jpg)
Example - ATM
![Page 11: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/11.jpg)
Withdraw - bad!
![Page 12: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/12.jpg)
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)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/13.jpg)
Withdraw - good!
![Page 14: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/14.jpg)
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)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/15.jpg)
Check balance
![Page 16: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/16.jpg)
Generate report
![Page 17: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/17.jpg)
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)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/18.jpg)
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)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/19.jpg)
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 21: Programming Real-World Functional - James Earl DouglasImmutable data Referential transparency Characteristics that differentiate functional programming Statelessness function add(a,b)](https://reader035.vdocuments.us/reader035/viewer/2022071114/5fead4fb1c352b31863a79be/html5/thumbnails/21.jpg)
Benefits
● Easily abstractable
● Applications become modular and composable
● Encourages code reuse
Why you should use functional programming