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


25

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

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

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


7
"그들은 일반적으로 더 작은 자기 설명 기능으로 구성되어 있기 때문에." 그것은 원칙적으로 명령형 언어에서 다르지 않습니다. 하나 : 아직도 즉시 큰 기능은 결국 무엇을 할 것인지 분명하지 자주의 항상 코드 자체에서 추론하지만 코멘트를 읽는 것보다 훨씬 더 많은 시간이 걸리는 경우 하나를 제공해야합니다.
leftaroundabout

2
동의하지 않습니다. 당신이 결국 할 것입니다 정확히 알 부작용을 해달라고 기능 langages은 주어진 서명 값을 반환하기 때문에
톰 종복

8
모든 기능적 언어가 순수한 것은 아니며 일부는 부작용이 있습니다.
Thanos Papathanasiou

1
그러나 당신이 의견에 어떤 느낌 코멘트 ...이 overthink입니다
GD1

1
프로젝트에 기능 언어에 익숙하지 않은 다른 구성원이있을 위험이 있습니까? 도움이 더 필요할 수 있습니다.
JeffO

답변:


84

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

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

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


1
훌륭한 대답, 그것은 무엇과 방법 (코드 자체에서 분명함)을 설명하는 주석으로 가득 찬 코드를 보지 못하지만 그 이유를 추측하게합니다.
Eric Wilson

32
패러다임
jk에

2
이것은 말할 필요도 없지만 코드가 복잡하거나 복잡하고 그러한 설명이 필요한 경우에 어떻게 그리고 어떻게되는지에 대한 의견을 추가해야합니다. 물론, 이와 같은 코드는 어쨌든 피해야하지만 항상 가능하지는 않습니다.
user606723

3
이 답변은 매우 간단하고 단순성에는 많은 가치가 있지만 완전히 사실은 아닙니다. 함수 이름은 종종 "무엇"을 충분히 자세하게 설명 할 수없고 설명 할 수 없기 때문에 문서가 종종 필요합니다 (예 : 가장 중요한 경우를 설명하기 위해). 주석에는 설명서가 자주 삽입됩니다.
luiscubal

2
아마도 함수 이름은 그것이 가능한 이유 를 설명해야 합니다.
Yam Marcovic

14

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

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

// 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

8
할아버지는 항상 무엇 대신에 이유를 문서화하라고 말합니다. 따라서 명령 코드에도 마지막 버전을 사용합니다.
Simon Bergot

3
할아버지가 옳아 그럼에도 불구하고 명령형 영역에서 의미가있는 특정 의견이 기능상 절대적으로 쓸모가 없음을 보여주고 싶었습니다.
Ingo

11

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


좋은 지적입니다. 특히 독자가 컴파일 된 라이브러리를 사용하고 있고 노출 된 함수 서명과 주석 만 볼 수있는 경우. 그들은 당신의 코드의 자기 설명적인 용기를 결코 보지 못할 것입니다.
FrustratedWithFormsDesigner

3

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

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

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

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


2

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

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


1

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

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

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


0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.