Home TIL 8일차
Post
Cancel

TIL 8일차

코드를 값으로 다루어 표현력 높이기

이번 학습에서 코드를 값으로 다루어 표현력 높이기라는 주제로 강의를 들었다. 이번 강의를 듣고 코드를 작성할 때 함수를 어떻게 작성하느냐에 따라 로직이 읽히는 코드가 될 수 있고 아닐 수 있다는 것을 알게 됐다. 그 중 go, curry, pipe라는 개념을 알게 됐다.

go

함수들과 인자들을 한번에 받아 즉시 평가하는데 사용한다.

pipe

함수들이 나열되어 있는 합성된 함수를 만드는데 사용한다. 내부에서 go함수를 사용하는 방식이다. 묶어주는 역할..?

curry

함수를 값으로 다루면서 받아둔 함수를 자신이 원하는 시점에서 평가 할 수 있다. 함수를 받아 함수를 리턴하고, 인자를 받아 원하는 인자의 개수가 들어오면 리턴한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//변경 전
reduce(
  add,
  map(
    (p) => p.price,
    filter((p) => p.price < 20000, products)
  )
);

//go 함수를 사용하여 실제 계산되는 순서대로 적용
go(
  products,
  (products) => filter((p) => p.price < 20000, products),
  (products) => map((p) => p.price, products),
  (prices) => reduce(add, prices)
);

//변경 후 아래와 같이 되지만 products만 인자로 받는거지 확연히 바뀌어 지진 않았다.
go(
  products,
  (products) => filter((p) => p.price < 20000)(products),
  (products) => map((p) => p.price)(products),
  (prices) => reduce(add)(products)
);

//하지만 위와같이 된다는 것은 그 다음 단계로 넘어갈  수 있다는 것이다.
//products가 생략가능해져 훨씬 보기 좋은 함수가 되었다.
go(
  products,
  filter((p) => p.price < 20000),
  map((p) => p.price),
  reduce(add)
);

❗ go함수로 함수를 보는 시점을 뒤집고, curry함수를 통해 보기 좋게 해준다. = 코드를 보기 좋게 해준다!

지연성

즉시 평가

실행되는 시점에 함수가 평가되는 것

지연 평가

실행되어도 원하는 시점이 아니라면 평가하지 않고 원하는 시점에서만 평가 되는 것

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// range 즉시 평가
// 숫자를 받고 숫자 크기만큼 배열을 리턴하는 함수
const range = (length) => {
  let i = -1;
  let res = [];
  while (++i < length) {
    res.push(i);
  }
  return res;
};

const add = (a, b) => a + b;

let list = range(4); //즉시 평가함으로 바로 평가된다.
reduce(add, list);

// 느긋한 range 지연 평가
const L = {};

L.range = function* (length) {
  let i = -1;
  while (++i < length) {
    yield i;
  }
};
let Llist = L.range(4); //평가되지않음
reduce(add, Llist); //reduce에서 값을 필요로 하는 시점에 평가됨

지연성의 장점

  • 필요한 시점에서만 실행되기에 즉시평가 되는 로직보다 상대적으로 계산이 효율적!

🚑깨달은 점

오늘 정말 많은 양을 공부했지만 정리를 하니 생각보다 많지 않았다. 그 이유는 코드의 표현과 지연성 공부를 하면서 내가 모든 내용을 이해하는 것과 하루 만에 완벽히 익히는 것이 불가능하다고 판단됐기 때문이다. 그래서 최대한 요약의 요약? 중요한 내용을 크게 기억하고 적는 전략을 짰다.

그래도 내가 중요하다고 생각하는 부분을 요약하는 능력을 기르는 것도 실력이라는 말을 듣고 TIL을 작성을 했다. 이렇게 학습하고 끝내는 것이 너무 아쉬워 JS와 함수형 프로그래밍과 친해진다면 다시 돌아와 공부를 해야 될 거 같다. 현재는 자세하게 쓰는 건 무리.. But 코드를 표현할 때 오늘 학습한 방법을 알았으니 대만족!😎

-- Missing configuration options! --

TIL 7일차

TIL 9일차