고차 함수


함수는 인수가 있는 다른 함수를 취하거나(또는) 반환하는 함수를 고차 함수라고 합니다.



 function X(){
       console.log("Hey Luffy");               
      }

 function Y(X){
  x();
 }
 y()(); // Prints Hey Luffy 


여기에서 함수 Y는 X()를 인수로 받아들이고 있으므로 Y는 고차 함수가 됩니다.

예제를 통해 고차 함수의 목적 이해하기

반경 배열을 고려하십시오const radius = [3,4,5,1];.
그리고 목표는 면적, 둘레 및 지름을 계산하는 것입니다.
정상적인 기능:

const calculateArea = function(radius){
const output = [];
   for(let i = 0; i < radius.length ; i++){
   output.push(Math.pi*radius[i]*radius[i]);
   }
return output;
}

const calculateCircuference = function(radius){
const output = [];
   for(let i = 0; i < radius.length ; i++){
   output.push(Math.pi*2*radius[i]);
   }
return output;
}

const calculateDiameter = function(radius){
const output = [];
   for(let i = 0; i < radius.length ; i++){
   output.push(2*radius[i]);
   }
return output;
}


위의 3가지 기능은 완벽하게 작동하지만 문제가 있습니다.
문제를 발견할 수 있습니까? 당신이 그것을 발견하면 우리는 문제를 해결하려고 노력할 것입니다. 그렇지 않으면 문제는 다음과 같습니다.
  • 반복 코드 => 소프트웨어 공학에는 Don't repeat yourself의 약자인 DRY 원칙이 있습니다.
    위의 3가지 함수는 거의 90%의 동일한 코드를 가지고 있으며, 변경된 것은 Area, Circumference, Diameter의 논리입니다.

  • 최적화된 접근 방식:
    함수를 관찰한 후 배열 선언을 반복하고 루프를 반복하고 배열을 반복해서 반환합니다. 그리고 변하는 것은 논리뿐입니다.
    함수 외부에서 논리를 추출하여 별도의 함수로 작성하지 않는 이유는 무엇입니까?
    예:

    const area = function(radius){
    return Math.pi*radius[i]*radius[i];
    }
    


    이제 배열을 받아들이는 일반 함수와 논리 함수를 인수로 작성하고 배열 초기화, 루프 반복, 논리 함수 호출 및 배열 반환만 수행합니다.
    예, 우리는 고차 함수를 작성하고 있습니다.

    const calculate = function(radius, logic){
     const output = [];
       for(let i = 0; i < radius.length ; i++){
       output.push(logic(radius[i])); // every time the logic is called with new array value.
       }
    return output;
    }
    


    계산 함수calculate(radius,area);를 호출하면 Area 배열을 반환합니다.

    아름다움:
    계산 기능이 얼마나 놀라운지 봅시다.
    이제 둘레, 지름을 계산해야 합니다. 더 이상 코드를 복사하여 붙여넣을 필요가 없습니다. 그러나 우리는 논리 함수 둘레와 지름 또는 찾고자 하는 값을 작성할 수 있습니다.
    함수에 논리를 작성하고 전달하여 함수를 두 번째 인수로 계산합니다.

    const circumference = (radius){
    return 2*Math.pi*radius;
    }
    const daimeter = (radius){
    return 2*radius;
    }
    


    두 번째 인수로 전달된 이 두 가지를 사용하여 계산 함수를 호출하기만 하면 됩니다. calculate(radius,circumference) calculate(radius,daimeter)
    결론:
    함수형 프로그래밍은 그 자체로 거대하지만 작은 부분으로서 "작은 함수로 생각하라"고 말합니다. 코딩 라운드 인터뷰를 할 때마다 고차 함수로 코드를 작성하십시오.

    고맙습니다.

    좋은 웹페이지 즐겨찾기