Code States TIL 11차 - 고차함수

최동혁·2020년 12월 21일
0

오늘은 고차함수에 대하여 배워보았습니다. 고차함수는 함수를 argument로 받거나 return 하는 함수입니다. 둘 중 한 경우만 만족해도 고차함수지만, 두 경우를 다 포함하는 예시를 들자면

function hof(func,num){
  return funcion(n){
    func(num,n);
  };
}
function add(a,b){return a+b;}
const add3=hof(add,3);
console.log(add3(0)) // 3
console.log(add3(5)) // 8

같은 예가 있겠습니다.

c++을 배울 때도 sort(arr.begin(),arr.end(),cmp) 같은 함수에서 cmp처럼 다른 함수를 인자로 받는 경우가 있었는데 이것도 고차함수의 한 예시라고 하네요. c++도 함수를 return할 수 있나 찾아보니 functional 이라는 헤더파일을 추가하면 된다고 합니다. 다만

function<int (const int &)> functionA(const function<int (const int &, const int &)> &functionB, const int & n);

같이 타입을 다 붙여줘야해서 javascript보다 번거로워보입니다.

고차함수의 활용 예로는 array의 forEach, map, filter, reduce 등이 있습니다.
arr.forEach(func) :

for(let a of arr) func(a);

와 같은 작용을 합니다. 배열의 모든 원소에 대해 순차적으로 func에 인자로 줍니다.
arr.map(func):

let res=[];
for(let a of arr) res.push(func(a)); 
return res;

와 비슷한 작용을 합니다. 배열의 모든 원소에 대해 순차적으로 func에 인자로 준 결과의 배열을 return합니다.
arr.filter(func):

let res=[];
for(let a of arr) if(func(a)) res.push(a);
return res;

와 비슷한 작용을 합니다. 배열에서 func(a)가 true로 취급되는 것만 포함한 배열을 return 합니다.
arr.reduce(func,base):

let res=base;
for(let a of arr) res=func(base,a);
//여기서 func는 인자를 두 개 받는 함수여야합니다.
return res;

와 비슷한 작용을 합니다. base가 없을 시 arr[0]과 arr[1]의 연산으로 시작합니다. base와 arr의 원소 두 값을 func의 인자로 주고, 그 결과와 arr의 원소를 가지고 이를 반복합니다.

0개의 댓글