functional programming with javascript
TRANSCRIPT
Functional ProgrammingWith JavaScript
In the beginning, God created “Programming paradigms” in 7 days (Genesis 101)👼
Imperative Programming
Procedure Programming
Object Oriented Programming
Functional Programming
~ a coding style / a way of thinking
တတေတာတေ�ာငတ
တေးတေ�တာပ ဘာထးလလ
Q: Don’t we write functions in every language ?
A: But functional programming take it to a whole another level
Def : Break any complex problem down into smaller sub-problems, solve them using functions, and finally combine them together to solve the bigger problem.
ဘယသတေတ�သ�းလ လ
F#, C# (.NETs)
Lisp & Perl (grandpas)
Erlang , Elixir & Haskell (hotshots)
Clojure & Scala (JVMs)
D, R, JS, Python, … (sexies)
Why FP in JavaScript
The root of all evil is “this” keyword 😈Object.prototype
OOP in JS is like sugar coated paracetamol 💊
.call .apply .bind // anyone ?
Input => process => output
f(x) = x * x // function (x) { return x * x }
g(f(x))
“ Programmer think of their programs more as pipes for data to travel through just like we did in Math “
Source ~ wellesley.edu
Imperative
let name = “azb”
let greeting = “Hello, I’m ”
console.log(greeting + name)
function greeting(name){
return “Hello, I’m ” + name
}
greeting(“azb”)
Functional
First-class citizen အခ�ငထးခ လတ�းစားTreat like other values
Pass around arguments and return as value
Define and manipulate functions from other functions
Reference from variable or self
Side Effects
Changing the value of a variable (parent/ global), OBVIOUSLY
Writing some data to disk, file, console, network
Manipulating of UI
Calling external process
Generally - STATE CHANGED
Pure functions (no side effects)
High-order function (return)
High-order function (accept)
Referential transparency
function add(a, b) { return a + b }
add(add(2, 3), add(4, 1))
add((2 + 3), add(4, 1))
add((2 + 3), (4 + 1))
(2 + 3) + (4 + 1)
Don’t LOOP (stream of data / HO funs)
.forEach
.map
.reduce
.filter
Immutability is bad
.pop .push
.shift .unshift
let a = 1
a = “hello world”
Persistent data structures
var, let, const right ? ahuh not really
Wait a min Object.freeze Object.seal
MORI
IMMUTABLE (sponsored by facebook)
Underscore
Lodash
Ramda
More FP
Currying
Tail Recursion
Pattern matching
Infinite data structure
Composition
Lazy evaluation
self.Q&A
Concurrency
Parallelism
Async
READABLE, EASY TO UNDERSTAND, REUSABLE
Writing with a larger team
Application larger than a todo app
Performance are not critical
You have to support the project
P.S
1. I/O is tricky in FP
2. Code LineNums are just a number
3. There’s no single true paradigm
Aung Zan Baw - တေအာငဇတေဘာWeb developer (Fairway Technology)
Links
Slides - https://goo.gl/3fmMXk
Best FP in JS - https://goo.gl/IqmkoT
ReactiveX !!!
Starter book - https://goo.gl/ctmBTo