# 고차함수 (Higher order function)

함수를 인자로 전달받거나 함수를 결과로 반환하는 함수 자바 스크립트의 함수는 일급 객체 -> 값처럼 인자로 전달할 수 있으며 반환할 수도 있다.

// 함수를 인자로 전달받고 함수를 반환하는 고차 함수
function makeCounter(predicate) {
  // 자유 변수. num의 상태는 유지되어야 한다.
  let num = 0;
  // 클로저. num의 상태를 유지한다.
  return function () {
    // predicate는 자유 변수 num의 상태를 변화시킨다.
    num = predicate(num);
    return num;
  };
}

Immutability를 지향하는 함수형 프로그래밍의 특성
로직의 조건문과 반복문을 제거 -> 복잡성을 해결하고 변수의 사용을 억제 상태 변경을 피하려하는 프로그래밍 패러다임이다.

조건문이나 반복문은 로직의 흐름을 이해하기 어렵게 하여 가독성을 해치고, 변수의 값은 누군가에 의해 언제든지 변경될 수 있어 오류 발생의 근본적 원인이 될 수 있기 때문이다.

특히 자바스크립트의 Array 객체는 매우 유용한 고차 함수를 메소드의 형태로 제공한다.

  1. Array.prototype.sort(compareFn?: (a: T, b: T) => number): this ✏️ ES1 배열의 요소를 정렬힌다. 원본 배열을 직접 변경하며 정렬된 배열을 반환한다.
const points = [40, 100, 1, 5, 2, 25, 10];

points.sort();
console.log(points); // [ 1, 10, 100, 2, 25, 40, 5 ]

기본적인 정렬의 순서는 Unicode 코드 포인트 순서에 따른다. 배열의 요소가 숫자 타입이라 할지라도 배열의 요소를 일시적으로 문자열로 변환한 후, 정렬한다.

따라서 이러한 경우를 피하기 위해 인자로 정렬 순서를 정의하는 비교 함수를 인수로 전달한다.

const points = [40, 100, 1, 5, 2, 25, 10];
points.sort(function (a, b) { return a - b; });
© Devlog from jeong