고차 함수의 명명 규칙? [닫은]


15

고차 함수에 대한 명명 규칙이 있습니까? 즉, 다른 함수를 반환하는 함수입니다.

자바 스크립트의 예 :

function onlyDivisibleBy(div) { // <-- higher order function
  return function (n) {
    return n % div === 0;
  }
}

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

arr.filter(onlyDivisibleBy(3)); // [0, 3, 6, 9]
arr.filter(onlyDivisibleBy(5)); // [0, 5]

위와 같이 작성하는 경향이 있습니다. 즉, 호출 지점에서 가독성을 최적화합니다 (위의 마지막 줄을 "5로 나눌 수있는 항목을 가져 오기 위해 배열 필터링"으로 읽었습니다). 그것이 사용되는 맥락에서,이 함수가 그 이름에서 무엇을하는지 이해하는 것은 쉽지 않습니다.


4
놀랍게도 저는 항상 "고차 함수"라는 용어를 다른 함수를 인수로 받아 들인 함수로 이해했습니다. 나는 당신이 틀렸다는 것을 말하는 것이 아닙니다. 단지 우리 이해의 차이가 흥미 롭습니다.
Racheet

6
함수를 반환하는 @Racheet 함수도 높은 순서입니다. 그들은 둘 다 할 수 있습니다.
itsbruce

3
@Racheet이 점은 좋은 예이며이 예제와 관련이 있습니다. OP가 실제로 구현하는 것은 부분 응용 프로그램입니다. 함수가 리턴되는 많은 (모두? 확실하지 않은) 사용은 부분 애플리케이션으로 대신 볼 수 있습니다. @ nickf : 여기 예를 구현하는 청소기 방법입니다

답변:


14

아니요, 함수를 반환한다는 것을 나타내는 특별한 명명 규칙이 필요하다고 생각하지 않습니다. 함수가 커리 되는 언어에서 알 수 있듯이 함수를 반환하는 것은 여러 개의 인수가있는 함수를 갖는 것과 본질적으로 동일합니다. 예를 들면 사이에 약간의 차이가 onlyDivisibleBy(3)(6)onlyDivisibleBy(3,6)

나는 술어를 나타내는 더 일반적인 방법 이라고 생각하지만 6을 2로 나눌 수 있다는 것을 감안할 때 반환하기가 이상해 보이지만 이름을에서 onlyDivisibleBy로 바꿀 isDivisibleByis입니다.onlyDivisibleBy(3)(6)true


5

강력하게 형식화 된 기능적 언어에서, 함수 시그니처에서 고차 함수 란 무엇이고 그렇지 않은지는 분명하므로 단순히 필요하지 않습니다.

다른 언어로, 나는 그런 명명 규칙을 겪어 본 적이 없으며 성 가시지 않을 것이라고 생각할 수 없습니다. 그런 이름을 오버로드하는 것보다 이름 지정 기능에 집중하는 것이 더 좋습니다.


4

아니요. 어떤 것도 사용해서는 안됩니다.

왜?

그것은 일종의 헝가리 표기법 이기 때문입니다 . 아이디어는 고차 함수에 전달 된 함수는 일종의 변수라는 것입니다. 그러니 그들을 그렇게 취급하십시오.


1
헝가리 표기법을 모든 비용으로 피해야한다는 의미는 무엇입니까? 나는 읽는 것을 권 해드립니다 잘못된 코드 룩 잘못된 만들기
TehShrike

4
나는 전에 그것을 읽었으며, 여전히 헝가리 표기법이 나쁘다고 생각합니다. :)
Wilbert

@TehShrike 링크가 깨졌습니다.
corvus_192

1
@ corvus_192는 Joel의 블로그 디자인에서 길을 잃었을 것입니다! 새로운 URL은 joelonsoftware.com/2005/05/11/making-wrong-code-look-wrong 인
TehShrike
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.