Download - Functional programming with ES6
![Page 1: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/1.jpg)
Functional Programming with ES6
Guillaume Badi • 25.11.2015
![Page 2: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/2.jpg)
Me ?
Developer Evangelist @Mailjet
Student @42
Node.JS fanboy
Autodidact
Twitter: @WeshGuillaume
![Page 3: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/3.jpg)
This is the Government
(l’état, c’est moi)
![Page 4: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/4.jpg)
![Page 5: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/5.jpg)
Documents
Money
![Page 6: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/6.jpg)
When the money comes from the “Companies”, we have a set of rules describing the way it has to be distributed.
![Page 7: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/7.jpg)
The hierarchical approach makes it easy to visualize but hard to improve.
![Page 8: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/8.jpg)
Problems
Nobody fully understands it
It requires tons of people to maintain
Adding new institutions is a pain
Changing something in one area requires changes in many other areas
![Page 9: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/9.jpg)
Economists call it Bureaucracy
![Page 10: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/10.jpg)
We call it Object Oriented programming
![Page 11: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/11.jpg)
This is a structured mess
![Page 12: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/12.jpg)
We want a function that takes the existing agents and returns new ones, when the money comes in.
![Page 13: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/13.jpg)
Documents
Money
![Page 14: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/14.jpg)
We could model it differently.
Companies1
Population1
Government1
Companies2
Population2
Government2
![Page 15: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/15.jpg)
“It's not who I am underneath, but what I do that defines me.” - The Batman
![Page 16: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/16.jpg)
Object Oriented Programming is good at describing things
![Page 17: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/17.jpg)
Describing data.
![Page 18: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/18.jpg)
Describing patterns
![Page 19: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/19.jpg)
And by extension…
CAF = (salary, rent) => [Function]
Pole Emploi = (workPeriod) => [Function]
Institutions = (salary, rent, workPeriod) => [Function]
![Page 20: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/20.jpg)
We want to “transform” our data, the mathematical way.
![Page 21: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/21.jpg)
Functions should be pure. Understand “context-free”.
![Page 22: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/22.jpg)
Functions are data that operate on some other data. It makes your code easy to test
![Page 23: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/23.jpg)
Why is ES6 good for the Job ?
![Page 24: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/24.jpg)
Function syntax is now short and clear
![Page 25: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/25.jpg)
Returning functions is pure poetry
![Page 26: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/26.jpg)
Same code in Go
![Page 27: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/27.jpg)
Promises. comma.
![Page 28: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/28.jpg)
Promises. period.
![Page 29: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/29.jpg)
A lot of people just hate JavaScript
![Page 30: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/30.jpg)
![Page 31: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/31.jpg)
But precisely with this syntax, We have the choice to adopt a Java coding style...
Flatten a nested array
![Page 32: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/32.jpg)
...Or a cleaner functional style
![Page 33: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/33.jpg)
Functional programming is not simple. It requires
discipline and… meditation
![Page 34: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/34.jpg)
![Page 35: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/35.jpg)
Immutable data is one of the keys
![Page 36: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/36.jpg)
![Page 37: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/37.jpg)
Use map/filter/reduce when you can
![Page 38: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/38.jpg)
If you have to use the words “and” or “then”, to describe your function, split it.
![Page 39: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/39.jpg)
Documents
Money
![Page 40: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/40.jpg)
We could model it differently.
Companies1
Population1
Government1
Companies2
Population2
Government2
![Page 41: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/41.jpg)
![Page 42: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/42.jpg)
![Page 43: Functional programming with ES6](https://reader036.vdocument.in/reader036/viewer/2022062412/5881610a1a28ab80508b5bb9/html5/thumbnails/43.jpg)
Merci
Github: GuillaumebadiTwitter: @WeshGuillaume