Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
| 장 | 제목 | 페이지 | 작성자 | 완료 |
| ---- | ----------------------------------- | ------ | ------ | ---- |
| 1.1 | 함수형 프로그래밍 그거 먹는 건가요? | 1 | | |
| 1.2 | 함수형 자바스크립트의 실용성 | 4 | 정수민 | |
| 1.2 | 함수형 자바스크립트의 실용성 | 4 | 정수민 ||
| 1.3 | 함수형 자바스크립트의 실용성2 | 14 | 김강현 | |
| 1.4 | 함수형 자바스크립트를 위한 기초 | 26 | 김태현 | |
| 1.5 | 정리 | 49 | | |
Expand All @@ -55,6 +55,7 @@
| 장 | 제목 | 페이지 | 작성자 | 완료 |
| ---- | ----------------------- | ------ | ------ | ---- |
| 2.1 | 객체와 대괄호 다시 보기 | 51 | 김상초 | |
| 2.2 | 함수 정의 다시 보기 | 57 | 정수민 |✅|



Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# 함수형 자바스크립트의 실용성
## 1. for, if문 사용 줄이기

- for문은 filter함수로, if문은 predicate함수로 대체함.
- 매번 for문으로 사용하기보다 filter함수를 재활용할 수 있음.
- `new_list`를 만들어서 기존 상태를 변경하지 않고 새로운 값을 반환함.

```jsx
/* 기존 코드 */
const temp_users = [];
for(const i = 0, leng = users.length; i < len; i++) {
if(users[i].age < 30) temp_users.push(users[i]);
}
console.log(temp_users.length);

/* FP로 표현✨ */
function filter(list, predicate) {
const new_list = [];
for(const i = 0, leng = list.length; i < len; i++) {
if(predicate(list[i])) new_list.push(list[i]);
}
}
```

## 2. map 함수

- 반복적으로 사용되는 for문을 map함수로 분리시킴.

```jsx
/* 기존 코드 */
const ages = [];
for (let i = 0; len = users_under_30.length; i < len; i++) {
ages.push(users_under_30[i].age);
}
console.log(ages);

const names = [];
for (let i = 0, len = users_over_30.length; i < len; i++) {
names.push(users_over_30[i].name);
}

/* FP로 표현✨ */
function map(list, iteratee) {
const new_list = [];
for (let i = 0, len = list.length; i < len; i++) {
new_list.push(iteratee(list[i]));
}
return new_list;
}
```

## 3. 함수를 리턴하는 함수

객체에서 특정 키에 대한 값을 리턴하도록 만드는 bvalue 함수

```jsx
function bvalue(key) {
return function(obj) {
return obj[key];
}
}
```

bvalue함수로 코드 리팩토링하기

```jsx
/* before */
const results = map(users, function(user) {return user.age < 30}),
function(user) {return user.age;})));

/* after */
const results = map(users, function(user) {return user.age < 30}), bvalue('age'))));
```

## 정리

- 함수형 프로그래밍에서는 **항상 동일하게 동작하는 함수**를 만들고 보조 함수를 조합하는 식으로 로직을 완성한다.
- 동일한 인자가 들어오면 항상 동일한 값을 리턴하도록 한다.
- 함수형 프로그래밍은 부수효과를 최소화 하는 것이 목표에 가깝다.
Loading