Udemy - JavaScript: The Advanced Concepts
. 함수와 데이터의 분리
. 함수를 재활용 할수있음
예상가능한 결과를 주고, 버그를 줄여서 좋은데
side effect 없는 함수만으로는 무슨 의미가 있니
그래서 함수별로 역할을 구분지어 소통담당, 퓨어 등으로 isolate하는게 중요
DB에서 같은 user를 여러번 delete요청하면 에러가 나지만, get요청은 에러나지않음
console.log(5)는 외부세계를 변화시키니 pure하다고 할수는 없지만 항상 일정한 결과를 냄
-> imdmpotent 함수는 pure하지는 않지만, 예측가능한 함수가 됨
machine에게 구체적인 행동방법을 알려주는가 vs 결과를 요청하고 맡기는가
물컵을 집고/돌아서/나에게 와서/내손에 옮겨 vs 물 좀 줘
machine code vs high level code
-> FP는 선언적 코딩을 하도록 해줌
원본을 바꾸지 않는다
-> side effect를 만들지않음
HOF : 함수를 변수나 리턴값으로 사용 (JS에서 함수는 1급객체)
-> 클로저를 가능하게 함
클로저 :
-> private한 (보호되는) state를 사용할 수 있음
다수의 파라메터를 받는 함수를 한 번에 한개의 파라메터를 받는 함수로 변환
const multiply = (a, b) => a * b
const curriedMultiply = (a) => (b) => a * b
const multiplyBy5 = curriedMultiply(5)
다수의 파라메터를 받는 함수에 미리 일부 파라메터 값을 넣어놓고,
다음번 call에 나머지 파라메터값을 받음
const multiply = (a, b, c) => a * b * c
const partialMultiplyBy5 = multiply.bind(null, 5)
partialMultiplyBy5(10, 20)
const currying = (a) => (b) => (c) => a * b * c
함수를 컨베이어벨트처럼 차례로 실행
데이터를 넣었다가, 리턴을 받은걸 다시 넣고, 리턴을 받은걸 다시넣고...리턴을 받음
compose와 pipe는 순서의 차이
fn1(fn2(fn3(50)));
compose(fn1, fn2, fn3)(50) //Right to left
pipe(fn3, fn2, fn1)(50)//left to right
함수가 갖는 파라메터의 갯수
-> FP에서는 arity가 적을수록 좋다 (유연하게 적용가능)
커링/파셜은 왜쓰는거야?
람다? lodash? JS엔 compose가 없으면 람다 써도 됨? 람다가 언어가 아니라 라이브러리였어?
js는 함수형이야 오브젝트형이야?