고차 함수
함수는 인수가 있는 다른 함수를 취하거나(또는) 반환하는 함수를 고차 함수라고 합니다.
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가지 기능은 완벽하게 작동하지만 문제가 있습니다.
문제를 발견할 수 있습니까? 당신이 그것을 발견하면 우리는 문제를 해결하려고 노력할 것입니다. 그렇지 않으면 문제는 다음과 같습니다.
위의 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)
결론:
함수형 프로그래밍은 그 자체로 거대하지만 작은 부분으로서 "작은 함수로 생각하라"고 말합니다. 코딩 라운드 인터뷰를 할 때마다 고차 함수로 코드를 작성하십시오.
고맙습니다.
Reference
이 문제에 관하여(고차 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kanakaraju/higher-order-functions-374b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)