기능적 언어로 다르게 언급해야합니까? [닫은]

방금 함수형 프로그래밍을 시작하고 코드에 주석을 달 수있는 올바른 방법이 궁금합니다.

이름과 서명이 이미 알아야 할 모든 것을 알려 주므로 짧은 기능에 대해서는 언급이 약간 중복되는 것 같습니다. 더 큰 기능에 대한 주석은 일반적으로 더 작은 자체 설명 기능으로 구성되므로 약간 중복되는 것처럼 보입니다.

기능적 프로그램을 주석 처리하는 올바른 방법은 무엇입니까? 반복 프로그래밍에서와 동일한 접근 방식을 사용해야합니까?



답변

함수 이름은 무엇 을하고 있는지 말해야 합니다 .

구현 방법 을 알려줄 것입니다.

설명을 사용하여 하고 있는지 설명 하십시오.


답변

확실히이 있다 기능 프로그램은 일반적으로 필수적 것보다 다른 추상화 수준이기 때문에이 질문의 요점은.

이 때문에 다른 스타일의 문서가 필요합니다. 반복 프로그램에서는 코드의 본질이 상용구 뒤에 숨겨져 있기 때문에 다음 코드와 같이 주석이 도움이 될 수 있습니다.

// map 'toUpperCase' over 'container' yielding 'result'
Container result = new Container();
for (int i=0; i < container.size(); i++) {
             result.addToTail(container.atElement(i).toUpperCase());
}

그러나 이것은 기능적 언어에서 분명히 의미가 없습니다.

-- map 'toUpperCase' over 'list'
let result = map toUpperCase list

보다 나은:

-- we need the FooBars in all uppercase for the Frobnitz-Interface
let result = map toUpperCase list


답변

우리가 함수를 문서화하는 이유는 독자가 함수 본문을 원하지 않거나 읽을 수 없기 때문입니다. 이러한 이유로, 기능 언어로도 큰 기능을 문서화해야합니다. 구현을 살펴보면 함수의 기능을 쉽게 이해할 수 있는지 여부는 중요하지 않습니다.


답변

함수 이름과 매개 변수 이름만으로는 계약 을 지정하기에 충분하지 않은 경우 함수에 주석을 달아야합니다 .

// returns a list of Employees    <-- not necessary
def GetEmployeeList: ...

// returns a list of Employees sorted by last name    <-- necessary
def GetEmployeeList: ...

간단히 말해서 계약은 기능이 기대하는 것과 보장하는 것을 정의합니다. 엄밀히 말하면, GetEmployeeList정렬 된 목록을 반환하지만 함수 이름이나 주석에서 그렇게 말하지 않으면이 함수의 소비자는이 동작에 의존해서는 안됩니다. 문서화되지 않은 구현 세부 사항이며 작성자 GetEmployeeList는 언제든지이 동작을 변경할 수 있습니다.


답변

주석 자체에는 코드의 기능 (실제로 코드 자체로 표시됨)에 대한 대체 설명 이 포함되어서는 안되며 코드가 작성된 방식 에 대한 이유가 설명되어 있습니다.

즉, 기능 언어에서 주석 자체 가 달라야 할 이유는 없습니다 .


답변

모든 코드를 문서화하는 데 동일한 접근 방식을 취합니다.

  • 설명이 포함 된 이름을 사용하십시오.
  • 복잡한 논리를 피할 수 없다면 합리적으로 복잡한 논리 앞에 주석을 추가하십시오.
  • 전체 시스템에 대한 개요를 작성하십시오.

이름과 타입 시그니처가 함수의 기능을 정확히 알려주지 않으면 일반적으로 잘못하고있는 것입니다.


답변

25 세가되면 훨씬 더 잘 기억하는 경향이 있습니다. 나이가 들수록 레거시 코드가있는 여러 시스템에 참여하게되므로 (오늘 작성하는 코드는 10-15 년 후에 레거시 코드가 될 것입니다) 의견이 있으면 매우 유용 할 수 있습니다.