
- let보다는 가급적 const를 사용
functional programming의 시작은 불변성 유지이다.
let사용을 줄이고 const로 개발하는 습관을 권장
수정된 값이 필요할 때에는 create new variable .
Do Not This:
let foo = 100
...
foo = somthing(foo, "bar")
Do This:
const foo = 100
...
const new_foo = somthing(foo, "bar")
- Array, Date의 Mutaion Method를 가급적 지양
push, pop, shift, sort, reverse 등 객체를 변하는 Method를 가급적 spread operator로 대체하거나 값을 복사해서 사용 권장!!
Do Not This:
const example = (arr:number[], date:Date) => {
arr.push(4)
arr.sort()
date.setMonth(10)
}
Do This:
const example = (arr:number[], date:Date) => {
const new_arr = [...arr, 4]
const sorted_new_arr = [...new_arr].sort()
const new_date = new Date(date).setMonth(10)
return [new_arr, new_date]
}
- 가급적 Object의 필드에 대입 연산자 사용 지양
** 가급적' 이라는 의미를 잘 생각하고 값을 변경할 때에는 항상 scope에 대해 생각하며 코딩**
본말을 전도해서 극단적으로 let을 쓰지 않고 Array push를 쓰지 않고 Object의 값을 변경할때 항상 복사 x
값을 변경할때 변수가 선언된 위치에서 부터 3~7줄 범위내에서 수정되며 선언된 함수의 scope를 벗어나지 않는 값이라면 복사해서 값을 옮기는 행위는 리소스 낭비이다..
Do Not This:
const example = (obj:Object) => {
obj.foo = 200
}
Do This:
const example = (obj:Object) => {
return {...obj, foo: 200}
}
- pure function과 effect를 확실하게 구분해서 작성
일부만 Pure하면 Pure한게 아니다. 예를 들어 const와 spread operator를 통해서 불변성을 지키는듯 보이는 코드들 안에 부수효과를 유발하는 코드가 있다면 pure하지 않은 것이다. 분리할 수 있는 방법을 고민하라. pure function은 크지 않아도 좋다.
- 그래도 요구사항대로 구현해서 코드가 작동하는게 제일이다!
위javascript는 멀티 패러다임 랭귀지이기에 함수형을 쓰던 객체지향으로 개발하던 잘 돌아가기만 한다면 일단 OK
차츰차츰 각 영역의 좋은점만 찾아서 영리하게 잘 이용할 수 있어야함
=>>>>>
** 본질을 잊지말자 **
우리가 함수형 프로그래밍을 해야 하는 이유는 깔끔하고 예측가능하며 테스트 하기 쉽고 안전한 코드를 만들기 위해서이며
javascript가 태생이 완전한 객체지향도 완전한 함수형도 아닌 밸런스를 가지고 있는 언어이기 때문이다. !!
#FuntionalProgramming
'JavaScript' 카테고리의 다른 글
| UseState (0) | 2023.03.11 |
|---|---|
| React 구조 디자인 매뉴얼 (0) | 2023.03.11 |
| [YOU DON'T KNOW JS] Chapter2. Call-Site(함수 호출부) (0) | 2022.08.17 |
| [JavaScript] DataType (0) | 2022.08.17 |
| [JavaScript] Variable (0) | 2022.08.17 |