함수 / 메소드의 '스펙'이름은 무엇입니까?


21

함수 / 메소드의 '사양'에 대한 특별한 이름이 있다고 확신합니다. 이 단어는

  • 얼마나 많은 논쟁이 필요한가
  • 논쟁의 순서
  • 선택적인 인수

그 이름이 있습니까?


2
몇 가지 종류의 "사양"이 있습니다. 인수 유형, 순서 및 필요성을 언급했습니다. 리턴 타입과 함께 이것을 타입 시그니처라고합니다. 스펙의 함수 부분의 이름을 고려하십니까? 클래스, 패키지, 모듈 등과 같은 네임 스페이스는 어떻습니까? 이 사양은 프로그래머 또는 기계에 대한 것입니까? 내 대답을 참조하십시오.
kdbanman

4
나는이 질문에 4 개의 가까운 투표가 있다고 놀랐습니다. 이것은 완벽하게 합법적 인 질문 IMHO이며 상당히 대답 할 수 있습니다 (사실 이미 이미 답변되었습니다).
썰매

@callum, 질문이 덜 모호해 지도록 표시를 수정하십시오. 특정 언어에 관심이 있습니까? 기계 사양 또는 프로그래머 사양? 호출 사양 또는 구현 사양?
kdbanman

1
@ kdbanman 난 그냥 "서명"이라는 단어를 기억하려고했습니다. 모호하지 않습니다. 언어별로 다릅니다. 답변을 받았습니다. 괜찮아.
callum

@ callum, 그것이 내가 생각한 것입니다. 답장을 보내 주셔서 감사합니다.
kdbanman

답변:


47

일반적으로 이것을 유형 서명 이라고합니다 .

형식 서명에는 함수의 반환 형식, 인수 수, 인수 유형 또는 전달할 수있는 오류가 포함됩니다.


6
보통? 나는 "시제품"에 익숙합니다. 어떤 분명히 유형 서명 플러스의 이름입니다 - en.wikipedia.org/wiki/Function_prototype
ShadSterling

14
@Polyergic, 서명은 프로토 타입보다 일반적이며이 경우에는 더 정확 합니다. 프로토 타입 서명을 선언 합니다. 특히, "prototype"은 Java 또는 C # 메서드 선언에서와 interface같이 또는 헤더 파일에서 C / C ++ 함수 선언에서 와 같이 구현하지 않고 선언하는 것을 의미 합니다 (문자 적으로 a라고 함 prototype).
kdbanman

12
또한, arity 는 인수 수에 대해서만 덜 사용되는 용어입니다.
Sebi

^ 오, 그거 흥미 롭습니다! JS를 손에 넣을 때 유형이 아닌 나를 안내 할 인수 수가 있기 때문에 기억해야합니다.
underscore_d

23

TL; DR 함수 서명 (또는 메소드 서명) 에 대해 이야기하고있을 것 입니다. 그 중 일부는 유형 서명입니다.

그러나 실제로 함수 "사양"으로 간주하는 대상에 따라 다릅니다. "프로그래머가 함수를 호출하는 데 필요한 모든 정보"로 해석합니다. 여기에는 함수 이름, 매개 변수 유형, 순서 및 필요성, 아마도 반환 유형 및 해당 함수의 네임 스페이스가 포함됩니다.

그러나 모든 것들이 필요한지 (또는 잘 정의되어 있는지) 사용중인 언어 / 환경에 따라 다릅니다. 또한 정의를 " 기계 가 함수를 호출하는 데 필요한 모든 정보"로 변경 하면 스펙이 다를 수 있습니다 1 .

엄밀히 말하면, 함수 (또는 메소드) 서명은 동일한 언어 내에서도 일관된 용어 2, 3 이 아닙니다 . 4, 5, 6, 7 그러나 거의 모든 프로그래머가 이해할 수 있기 때문에 원하는 단어 일 것입니다.


  1. C ++ 스펙 초안 n337, 정의 1.3.17, 서명에는 함수를 분석 할 필요가 없으므로 리턴 유형이 포함되지 않습니다.

  1. "서명"은 네임 스페이스 정보를 포함하지 않습니다
  2. "서명"와 같은 예외와 수식 포함 public, static

  1. C ++ "서명"에는 리턴 유형이 포함되지 않습니다
  2. C ++ "서명" 에는 반환 유형 포함됩니다.
  3. C ++ "서명"에는 함수가 템플릿의 전문화가 아닌 한 반환 유형이 포함되지 않습니다.
  4. C ++ "서명"에는 네임 스페이스 (범위) 정보 및 "기타 기타"항목이 포함됩니다.


나는 또한 "스펙"에 대해 이야기 할 때 그 방법이 무엇을하는지도 포함 할 것이다. 오늘의 초점에 따라 방법 을 구현 하는 데 필요한 추가 정보가 포함되거나 포함되지 않을 수 있습니다 .
CVn

@ MichaelKjörling은 이것들이 유효한 관심사이지만, 대부분의 프로그래머가 "서명"이라고 부르는 것과는 상당히 다른 의미입니다. 함수의 기능은 함수 이름에 포함되어야하므로 간접적으로 서명의 일부입니다. 어쨌든, 나는 기능 행동이나 구현이 asker가 의도 한 것이라고 생각하지 않습니다. 그가 한 것으로 판명되면 그에 따라 편집 할 것입니다.
kdbanman

서명 예, "사양"아니오 (FWIW, 나는 당신의 대답이 아주 좋으며 인용이 잘되었다고 생각합니다.)
CVn

피드백 감사드립니다. 나는 그 대답이 " 'spec'no"만큼 명확하지 않다고 생각한다. 그것은 사양의 의미에 달려 있습니다-기능 행동과 구현 지침을 포함하는 사양의 합리적인 정의를 확실히 만들 수 있습니다. 당신은 자신의 대답으로 그렇게 할 수 있습니다. 그러나 내가 말했듯이, 나는 이것이 그들이 asker가 의도 한 것이라고 생각하지 않습니다.
kdbanman

1
language-agnosticC ++ 예제는 (A) 나와 관련이 있고 (B) 종종 인간 용어를 둘러싼 혼란을 설명 하기 때문에 반대 의견을 표명했습니다.
underscore_d

0

나는 그 용어가 "계약"이라고 믿는다. 인터페이스와 발신자와 수신자의 예상 사항을 정의합니다. 그러나 함수 또는 클래스 정의로 많은 언어를 정의 할 수없는 허용되는 매개 변수 값과 같은 내용도 다루므로 "계약"이라는 용어는 의미보다 의미가 더 넓을 수 있습니다. 여러 객체 지향 및 Java 관련 프로그래밍 서적에서 그것을 보았습니다. Java와 관련이 있는지 확실하지 않지만 왜 필요한지 모르겠습니다. 서명은 일반적으로 사용되는 다른 용어이지만 "계약"처럼 자랐습니다.


이것이 질문이 실제로 함수 / 메소드의 "사양"의 이름 인 경우에 가장 적합한 답변입니다. 서명 자체는 메소드가 실제로 무엇을하는지, 매개 변수의 범위, 비 기능적
제약
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.