Refactoring to Functional - SDD...
Transcript of Refactoring to Functional - SDD...
![Page 1: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/1.jpg)
Refactoring to FunctionalHadi Hariri
![Page 2: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/2.jpg)
Functional Programming
In computer science, functional programming is a programming paradigm, a style of building the structure and elements of computer programs, that treats computation as the evaluation of mathematical functions and avoids state and mutable data. It is a declarative programming paradigm, which means programming is done with expressions.
![Page 3: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/3.jpg)
Let’s refactor to functional
![Page 4: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/4.jpg)
Wait. But why?
![Page 5: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/5.jpg)
Goals
Write less code.
Write expressive code.
Write correct code.
Write performant code. (because Silicon Valley)
![Page 6: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/6.jpg)
Be part of the “in-crowd”
![Page 7: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/7.jpg)
Can I use any language?
![Page 8: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/8.jpg)
What is a functional language?
![Page 9: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/9.jpg)
A language with…
Functions as First-Class Citizens
Higher-Order Functions
Lambdas
Top-level Functions*
Immutable Data
![Page 10: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/10.jpg)
…I’ll be using Kotlin. You can use Java 8, Java 7..5 +FJ, Scala, JavaScript, Clojure,
Haskell, F#, C#, OCaml, Lisp.
![Page 11: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/11.jpg)
Basic Function Syntax
![Page 12: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/12.jpg)
Higher-Order Functions and Lambdas
![Page 13: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/13.jpg)
Pure Functions
Given same input, function always provides same output
Execution does not cause observable side-effects
Referential Transparency
![Page 14: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/14.jpg)
Reduce moving parts
![Page 15: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/15.jpg)
Aim for Pure Functions
![Page 16: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/16.jpg)
Can we achieve our goals?
![Page 17: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/17.jpg)
![Page 18: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/18.jpg)
![Page 19: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/19.jpg)
What’s functional about that?
![Page 20: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/20.jpg)
The Loops
![Page 21: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/21.jpg)
Removing State
![Page 22: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/22.jpg)
Some syntax sugar
![Page 23: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/23.jpg)
Still emphasis on how, not what
![Page 24: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/24.jpg)
Writing less code
![Page 25: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/25.jpg)
Getting the data the way we need it
![Page 26: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/26.jpg)
Transforming data
![Page 27: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/27.jpg)
Again, let’s write less
![Page 28: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/28.jpg)
A more involved sample…
![Page 29: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/29.jpg)
The “manual” way
![Page 30: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/30.jpg)
Once again, writing less code
![Page 31: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/31.jpg)
![Page 32: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/32.jpg)
Applying these techniques to common scenarios
![Page 33: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/33.jpg)
Customer Search
![Page 34: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/34.jpg)
Customer Search
![Page 35: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/35.jpg)
Templates Patterns
![Page 36: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/36.jpg)
Less boilerplate
![Page 37: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/37.jpg)
Guaranteeing things take place
![Page 38: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/38.jpg)
Guaranteeing things take place
![Page 39: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/39.jpg)
Or when they take place
![Page 40: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/40.jpg)
Strategy Pattern
![Page 41: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/41.jpg)
Same strategy, less code
![Page 42: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/42.jpg)
What about dependencies?
![Page 43: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/43.jpg)
Let’s think about dependencies in classes…
![Page 44: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/44.jpg)
When dependencies grow
![Page 45: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/45.jpg)
How do we deal with dependencies?
![Page 46: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/46.jpg)
We pass in the behaviour
![Page 47: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/47.jpg)
Thinking Functionally
![Page 48: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/48.jpg)
Functions are our primitives
http://www.flickr.com/photos/mknowles/47457221/
![Page 49: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/49.jpg)
We’re merely combining functions
![Page 50: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/50.jpg)
Functions taking functions
filter - takes a predicate
map - takes a mapping function
groupBy - takes a key lookup function
![Page 51: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/51.jpg)
Functions returning functions
![Page 52: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/52.jpg)
Pipelining
![Page 53: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/53.jpg)
Keeping it readable
Abstract multiple pipeline calls into descriptive functions
Intermediate variables don’t always help
![Page 54: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/54.jpg)
How do we re-use?
![Page 55: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/55.jpg)
Composing functions
![Page 56: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/56.jpg)
Partial Function Applications
![Page 57: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/57.jpg)
Partial Function Applications
![Page 58: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/58.jpg)
Currying
![Page 59: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/59.jpg)
Currying
![Page 60: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/60.jpg)
And then there’s the data…
![Page 61: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/61.jpg)
We’re taking data and processing it in stages
![Page 62: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/62.jpg)
What is our data?
Customer
Point
InvoicesAge
![Page 63: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/63.jpg)
And what is this data?
Scalars: Age, Date of Birth, Amount
Collections of ATD’s: List of Customers, List of Invoices, Set of Pairs
![Page 64: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/64.jpg)
Take as input lists and output lists
![Page 65: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/65.jpg)
Common List Operations
map, flatMap, filter, findAll, merge, zip…..
![Page 66: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/66.jpg)
And scalars can be obtained from lists…
![Page 67: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/67.jpg)
Common Scalar Operations
first, last, find, aggregate..…
![Page 68: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/68.jpg)
Many functions boil down to folds
fold, reduce, aggregate…same thing.
![Page 69: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/69.jpg)
What is fold?
][f(x,y) where
x accumulator
y element in list
![Page 70: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/70.jpg)
What is fold?
][f( , ) =
![Page 71: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/71.jpg)
What is fold?
][f( , ) =
![Page 72: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/72.jpg)
f( , ) =
What is fold?
][
![Page 73: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/73.jpg)
f( , ) =
What is fold?
][
![Page 74: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/74.jpg)
f( , ) =
What is fold?
][
![Page 75: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/75.jpg)
f( , ) =
What is fold?
][
![Page 76: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/76.jpg)
Recursion, Pattern Matching and Folds
![Page 77: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/77.jpg)
The Recursive Maximum
![Page 78: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/78.jpg)
The Base is the accumulator
![Page 79: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/79.jpg)
Immutability of the data
![Page 80: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/80.jpg)
We need to avoid state
Treat lists as infinite
Allows for lazy evaluation, reactive programming
Aim for immutability
Create. Don’t modify.
There’s a difference between ReadOnly and Immutable
![Page 81: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/81.jpg)
What about Performance?
![Page 82: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/82.jpg)
That Annoying Fibonacci
![Page 83: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/83.jpg)
The Iterative Approach
![Page 84: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/84.jpg)
Memoization
![Page 85: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/85.jpg)
Recursion and Tail Calls
![Page 86: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/86.jpg)
Converting to Tail Calls
Memoization
Tail Call Optimization
![Page 87: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/87.jpg)
Tail Call Optimization
![Page 88: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/88.jpg)
Inlining
Higher-order functions can have performance impact
Inlining functions can minimise performance impact
![Page 89: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/89.jpg)
What about all that scary stuff?
![Page 90: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/90.jpg)
Functors
Collection of a whereby you can apply a function a -> b, returning collection of b
map is a an example of Functor
![Page 91: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/91.jpg)
Monads
Abstract Data Type, following a series of rules
Maybe Monad -> Option
List Monad -> IEnumerable<T> (Iterable<T>)
Promises
![Page 92: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/92.jpg)
In Summary
![Page 93: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/93.jpg)
Embrace Functions as Primitive Elements
Focus on writing less your own code
Focus on writing more descriptive code
Focus on writing deterministic code
Rocket Science
![Page 94: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/94.jpg)
Recommended Books
The Little Schemer
Learn you a Haskell
Functional Programming in Java
![Page 95: Refactoring to Functional - SDD Conferencesddconf.com/brands/sdd/library/Refactoring_To_Functional.pdf · Refactoring to Functional Hadi Hariri. Functional Programming In computer](https://reader031.fdocuments.net/reader031/viewer/2022013021/5ed68e645cd0d56eef02e70c/html5/thumbnails/95.jpg)
Thank you