함수형 프로그래밍

1. 함수형 프로그래밍 이란?

  • 대입문 없이 프로그래밍을 하는 것.
  • 함수를 인자로 받고 함수를 계산하고 함수를 반환하는 프로그래밍 → 일급함수
  • 참조투명성 : 함수를 호출하는 부분을 함수가 반환하는 값으로 바꾸어도 프로그램이 정상 동작한다. → 순수함수
  • 불변성 : 변수에 값을 대입해 문제를 해결하는 기존 방법과 다르게 한번 초기화 되어 설정된 값은 변경하지 않는다.
  • 영속적인 데이터 구조 : list.push(obj) 할 경우 새로운 요소를 추가해 반환하는 것 같지만 그렇지 않다.
    기존 데이터는 그대로 두고 데이터를 바라보는 수많은 시작점들을 설정해 새로운 데이터 구조로 보여지도록 한다.
  • 지연평가 : 코드 실행 즉시 평가하지 않는다. 함수형 프로그래밍은 일급함수를 사용하기 때문에 값이 필요한 시점에 평가할 수 있다.

2. 왜 함수형 프로그래밍이 좋은가?

  • 논리적이지 않고 예상하지 못한 문제가 발생하는 상황이 적다.
  • 사용하는 함수는 입력 값에 정해진 출력 값만 리턴하면 되므로 테스트가 쉽다.
  • 코어의 개수와 스레딩의 증가로 동시성 문제가 증가하고 있다. 함수형 프로그래밍은 대입문이 없기 때문에
    동시성 문제에서 자유롭다.

3. 예시

제곱을 구하는 함수형 프로그래밍

const log = console.log;
const integers = function *(i = 0) {
  while (true) yield i++;
}
const limit = function *(l, iter) {
  for (const n of iter) {
    yield n;
    if (n == l) return;
  }
}
const map = (f, iter) => {
  const res = [];
  for (const n of iter) {
    res.push(f(n));
  }
  return res;
}
const squares = n => n * n;
const squaresOf = l => map(square, limit(l, intergers(1)));

log(squaresOf(5));
// [1, 4, 9, 16, 25]