functional programming with javascript

21
Functional Programming With JavaScript

Upload: aung-zan-baw

Post on 11-Feb-2017

102 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Functional Programming with JavaScript

Functional ProgrammingWith JavaScript

Page 2: Functional Programming with 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

Page 3: Functional Programming with JavaScript

တတေတာတေ�ာငတ

Page 4: Functional Programming with JavaScript

တေးတေ�တာပ ဘာထးလလ

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.

Page 5: Functional Programming with JavaScript

ဘယသတေတ�သ�းလ လ

F#, C# (.NETs)

Lisp & Perl (grandpas)

Erlang , Elixir & Haskell (hotshots)

Clojure & Scala (JVMs)

D, R, JS, Python, … (sexies)

Page 6: Functional Programming with JavaScript

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 ?

Page 7: Functional Programming with JavaScript

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

Page 8: Functional Programming with JavaScript

Imperative

let name = “azb”

let greeting = “Hello, I’m ”

console.log(greeting + name)

function greeting(name){

return “Hello, I’m ” + name

}

greeting(“azb”)

Functional

Page 9: Functional Programming with JavaScript

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

Page 10: Functional Programming with JavaScript

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

Page 11: Functional Programming with JavaScript

Pure functions (no side effects)

Page 12: Functional Programming with JavaScript

High-order function (return)

Page 13: Functional Programming with JavaScript

High-order function (accept)

Page 14: Functional Programming with JavaScript

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)

Page 15: Functional Programming with JavaScript

Don’t LOOP (stream of data / HO funs)

.forEach

.map

.reduce

.filter

Page 16: Functional Programming with JavaScript

Immutability is bad

.pop .push

.shift .unshift

let a = 1

a = “hello world”

Page 17: Functional Programming with JavaScript

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

Page 18: Functional Programming with JavaScript

More FP

Currying

Tail Recursion

Pattern matching

Infinite data structure

Composition

Lazy evaluation

self.Q&A

Concurrency

Parallelism

Async

Page 19: Functional Programming with JavaScript

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

Page 20: Functional Programming with JavaScript

Aung Zan Baw - တေအာငဇတေဘာWeb developer (Fairway Technology)

Page 21: Functional Programming with JavaScript

Links

Slides - https://goo.gl/3fmMXk

Best FP in JS - https://goo.gl/IqmkoT

ReactiveX !!!

Starter book - https://goo.gl/ctmBTo