방금 함수형 프로그래밍을 시작하고 코드에 주석을 달 수있는 올바른 방법이 궁금합니다.
이름과 서명이 이미 알아야 할 모든 것을 알려 주므로 짧은 기능에 대해서는 언급이 약간 중복되는 것 같습니다. 더 큰 기능에 대한 주석은 일반적으로 더 작은 자체 설명 기능으로 구성되므로 약간 중복되는 것처럼 보입니다.
기능적 프로그램을 주석 처리하는 올바른 방법은 무엇입니까? 반복 프로그래밍에서와 동일한 접근 방식을 사용해야합니까?
방금 함수형 프로그래밍을 시작하고 코드에 주석을 달 수있는 올바른 방법이 궁금합니다.
이름과 서명이 이미 알아야 할 모든 것을 알려 주므로 짧은 기능에 대해서는 언급이 약간 중복되는 것 같습니다. 더 큰 기능에 대한 주석은 일반적으로 더 작은 자체 설명 기능으로 구성되므로 약간 중복되는 것처럼 보입니다.
기능적 프로그램을 주석 처리하는 올바른 방법은 무엇입니까? 반복 프로그래밍에서와 동일한 접근 방식을 사용해야합니까?
답변:
함수 이름은 무엇 을하고 있는지 말해야 합니다 .
구현 방법 을 알려줄 것입니다.
설명을 사용하여 왜 하고 있는지 설명 하십시오.
확실히이 있다 기능 프로그램은 일반적으로 필수적 것보다 다른 추상화 수준이기 때문에이 질문의 요점은.
이 때문에 다른 스타일의 문서가 필요합니다. 반복 프로그램에서는 코드의 본질이 상용구 뒤에 숨겨져 있기 때문에 다음 코드와 같이 주석이 도움이 될 수 있습니다.
// 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 년 후에 레거시 코드가 될 것입니다) 의견이 있으면 매우 유용 할 수 있습니다.