real world functional programming
play

Real-World Functional Programming James Earl Douglas Kelley - PowerPoint PPT Presentation

Real-World Functional Programming James Earl Douglas Kelley Robinson @jearldouglas @kelleyrobinson bit.ly/real-world-fp Key Concepts Characteristics that differentiate functional programming Statelessness Immutable data


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

  2. Key Concepts Characteristics that differentiate functional programming ● Statelessness ● Immutable data ● Referential transparency

  3. Statelessness function add(a,b) { return a + b; } var x = add(1,1) // 2 var y = add(1,1) // 2 var z = add(1,1) // 2 add always returns the same output for a given input

  4. Immutable data var x = “hello” // “hello” var y = x + “, world” // “hello, world” var z = y.substring(0,5) // “hello”

  5. 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

  6. Benefits Why you should use functional programming ● Easily abstractable ● Applications become modular and composable ● Encourages code reuse

  7. We had a problem . . .

  8. Architectural issues Existing API design had limitations ● Locked into using one data structure ● Clumsy persistent data model ● Bottlenecked deployment

  9. Let’s refactor Using functional concepts to solve our problems.

  10. Example - ATM

  11. Withdraw - bad!

  12. Withdraw - bad! function withdraw(amount) { if (balance >= amount) { balance = balance - amount return amount } else { return 0 } }

  13. Withdraw - good!

  14. Withdraw - good! function withdraw(amount) { return function(balance) { if (balance >= amount) { return [amount, balance - amount] } else { return [0, balance] } } }

  15. Check balance

  16. Generate report

  17. Generate report (in Spanish)

  18. Withdraw - in Bitcoin

  19. Withdraw - in Bitcoin 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))

  20. Live code time bit.ly/real-world-fp

  21. Benefits Why you should use functional programming ● Easily abstractable ● Applications become modular and composable ● Encourages code reuse

  22. Thank you! james@versal.com kelley@versal.com @jearldouglas @kelleyrobinson bit.ly/real-world-fp

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend