고차함수

안정태·2021년 3월 17일
0

Study

목록 보기
1/33

MapReduce Model

MapReduce란 대용량의 데이터를 처리하기 위한 분산프로그래밍 모델로 타고난 병행성을 내포하고 있다.

  • Map단계와 Reduce단계로 처리과정을 나눠서 작업
    Map : 흩어져있는 Data를 key, value형태로 연관성 있는 데이터로 묶는 작업
    Reduce : Map화한 작업 중 중복데이터 제거, 원하는 데이터 추출 작업

js closure vs curry

- closur : 함수와 함수가 선언된 어휘적 환경의 조합으로 지역변수, 외부함수의 변수, 전역변수의 접근이 전부 가능하다.

function init() {
  var name = "Mozilla"; // name은 init에 의해 생성된 지역 변수이다.
  function displayName() { // displayName() 은 내부 함수이며, 클로저다.
    alert(name); // 부모 함수에서 선언된 변수를 사용한다.
  }
  displayName();
}
init();

function makeAdder(x) {
  var y = 1;
  return function(z) {
    y = 100;
    return x + y + z;
  };
}

var add5 = makeAdder(5);
var add10 = makeAdder(10);
//클로저에 x와 y의 환경이 저장됨

console.log(add5(2));  // 107 (x:5 + y:100 + z:2)
console.log(add10(2)); // 112 (x:10 + y:100 + z:2)
//함수 실행 시 클로저에 저장된 x, y값에 접근하여 값을 계산

위 코드를 보면 add5변수에는 makeAdder함수의 x값에 5가 할당된 체로 함수 사용이 가능하고
add10변수에는 makeAdder함수의 x값에 10이 할당된 체로 함수 사용이 가능하다

- curry : 여러 개의 인자를 가진 함수를 호출 할 경우, 파라미터의 수보다 적은 수의 파라미터를 인자로 받으면 누락된 파라미터를 인자로 받는 기법을 말한다.

var greetDeeplyCurried = function(greeting) {
  return function(separator) {
    return function(emphasis) {
      return function(name) {
        console.log(greeting + separator + name + emphasis);
      };
    };
  };
};

var greetAwkwardly = greetDeeplyCurried("Hello")("...")("?");
greetAwkwardly("Heidi")(); //"Hello...Heidi?"
greetAwkwardly("Eddie"); //"Hello...Eddie?"

위 코드에서 greetAwkwardly() 함수가 Currying함수 이다. Currying은 어떤 함수를 호출할 때 대부분의 매개 변수가 항상 비슷할 때 유용하게 쓸 수 있다.

js imperative vs declarative

절차형(imperative)

//imperative
function double (arr) { 
  let results = [];
  for (let i = 0; i < arr.length; i++){ 
    results.push(arr[i] * 2) 
  } 
  return results 
}

'어떻게'하는지를 알려주는 프로그래밍 방식이다.

선언형(declarative)

function double (arr) { 
  return arr.map((item) => item * 2) 
}

말 그대로 내가 원하는걸 '선언'하는 프로그래밍 방식이다.

javascript function composition

함수 컴포지션(function composition)은 함수를 조합 한다는 뜻이다. 간단히 말하면 함수의 인자로 함수를 받는다고 보면 된다.

profile
코딩하는 펭귄

0개의 댓글