서명의 종류

Type signature

컴퓨터 과학에서 유형 서명 또는 유형 주석은 함수, 서브루틴 또는 메서드에 대한 입력과 출력을 정의합니다.유형 시그니처는 함수에 포함된 인수의 수, 유형 및 순서를 포함합니다.타입 시그니처는 일반적으로 오버로드된 많은 형식 중에서 호출할 함수의 올바른 정의를 선택하기 위해 오버로드 해결 에 사용됩니다.

C/C++

C 및 C++에서는 일반적으로 함수 프로토타입이라고 불리는 에 의해 타입 시그니처가 선언됩니다.C/C++에서는 함수 선언은 그 사용을 반영합니다.예를 들어 시그니처가 있는 함수 포인터(int)(char, double)는 다음과 같이 호출됩니다.

 c; 이중으로 하다 d; 인트 리트밸 = (*fPtr)(c, d); 

얼랑

Erlang에서는 다음과 같이 임의로 signatures를 선언할 수 있습니다.

-사양(기능 n_n ame(유형 1(), 유형 2(), ...) -> out_type()). 

예를 들어 다음과 같습니다.

-사양(짝수(번호()) -> 부울()).}} 

하스켈

Haskell의 유형 시그니처는 일반적으로 다음 형식을 취합니다.

기능명 :: arg1타입 -> arg2 타입 -> ... -> argNType 

결과의 유형은 처음 제공된 인수를 모두 지난 것으로 간주할 수 있습니다.이것은 하스켈이 퍼스트 클래스 함수를 지원함으로써 가능한 카레링의 결과입니다.이 함수는 하나의 인수가 제공되고 함수가 제공되지 않은 인수에 대한 함수를 생성하기 위해 "큐리"되는 두 개의 입력을 필요로 합니다.그래서 전화한다.f x,어디에f :: a -> b -> c는 새로운 기능을 생성합니다.f2 :: b -> c라고 할 수 있다f2 b생산하다c.

실제 타입 사양은 다음과 같은 실제 타입으로 구성될 수 있습니다.Integer 또는 파라미터 다형함수에서 사용되는 일반적인 유형 변수입니다.a, 또는b, 또는anyType다음과 같이 쓸 수 있습니다.functionName :: a -> a -> ... -> a

Haskell은 고차 함수를 지원하므로 함수를 인수로 전달할 수 있습니다.이것은 다음과 같이 기술되어 있습니다.functionName :: (a -> a) -> a

이 함수는 형식 시그니처가 있는 함수를 받아들입니다.a -> a및 유형의 데이터를 반환합니다.a나가.

자바

Java 가상 시스템에서 내부 유형 서명은 가상 시스템 코드 수준에서 메서드와 클래스를 식별하는 데 사용됩니다.

예:방법String String.substring(int, int)바이트 코드로 표시됩니다.Ljava/lang/String.substring(II)Ljava/lang/String;.

의 시그니처main방법은 다음과 같습니다.

일반의 정적인 무효 주된(스트링[] args); 

분해된 바이트 코드에서는Lsome/package/Main/main:([Ljava/lang/String;)V

의 메서드 시그니처main()method에는 다음 세 가지 수식어가 있습니다.

  • public에 의해,main()메서드는 임의의 오브젝트로 호출할 수 있습니다.
  • static에 의해,main()method는 클래스 메서드입니다.
  • void에 의해,main()메서드에 반환값이 없습니다.

서명

기능 시그니처는 기능 프로토타입으로 구성됩니다.이름, 범위 및 매개 변수와 같은 함수에 대한 일반 정보를 지정합니다.많은 프로그래밍 언어에서는 컴파일러에서 링커로 더 많은 의미 정보를 전달하기 위해 이름 망글링을 사용합니다.머글링과 더불어 함수 시그니처(대부분의 컴파일러에 내부적으로 저장됨)에 정보가 과잉되어 있어 쉽게 이용할 수 없지만 접근할 [1]수 있습니다.

함수 시그니처의 개념을 이해하는 것은 모든 컴퓨터 과학 연구에서 중요한 개념입니다.

  • 최신 객체 방향 기술은 기본적으로 함수 시그니처로 만든 템플릿인 인터페이스를 사용합니다.
  • C++ 에서는, 다양한 시그니처의 함수 오버로드를 사용합니다.

복수의 상속을 실시하려면 예기치 않은 결과를 피하기 위해 함수 시그니처를 고려해야 합니다.

컴퓨터 과학 이론, 특히 다형성의 개념은 함수 시그니처의 개념을 많이 사용한다.

C 프로그래밍 언어 서명은 원형 정의와 거의 동일합니다.

"서명"이라는 용어는 컴퓨터 공학에서 다음과 같은 다른 의미를 가질 수 있습니다.

  • 파일 서명은 파일 내용을 식별하거나 확인할 수 있습니다.
  • 데이터베이스 시그니처는 데이터베이스의 스키마 또는 버전을 식별 또는 확인할 수 있습니다.
  • ML 패밀리 프로그래밍 언어에서 "signature"는 인터페이스의 역할을 하는 모듈 시스템의 구조를 나타내는 키워드로 사용됩니다.

메서드 서명

컴퓨터 프로그래밍, 특히 객체 지향 프로그래밍에서 방법보통 메서드 이름과 파라미터[2]수, 유형 및 순서를 포함하는 고유한 메서드 시그니처에 의해 식별된다.메서드 시그니처는 메서드의 최소 유형입니다.

C/C++

C/C++에서는 메서드시그니처는 메서드명, 파라미터의 수 및 타입이지만 값의 배열로 구성된 마지막 파라미터를 가질 수 있습니다.

인트 인쇄물(컨스턴트 *, ... ); 

이러한 파라미터의 조작은 표준 라이브러리 헤더의 루틴을 사용하여 실행할 수 있습니다.<stdarg.h>.

C#

C의 구문과 마찬가지로 C#의 메서드시그니처는 이름, 파라미터의 수 및 타입으로 구성됩니다.마지막 파라미터는 [3]값의 배열일 수 있습니다.

무효 더하다(나가. 인트 , 파라미터 인트[] 가치); [...] 더하다(나가. , 3, 5, 7, 11, -1);  // 합계 == 25 

자바

Java에서 메서드 시그니처는 이름과 파라미터의 수, 유형 및 순서로 구성됩니다.반환 유형 및 느려진 예외는 메서드 시그니처의 일부로 간주되지 않으며 매개 변수 이름도 아닙니다. 메서드의 고유성을 확인하기 위해 컴파일러에 의해 무시됩니다.

메서드 시그니처는 클래스에서 오버로드된 메서드(같은 이름의 메서드)를 구별하는 데 도움이 됩니다.반환 유형은 오버로드에 포함되지 않습니다.오버로드된 [4]메서드를 구별하려면 메서드 서명만 사용해야 합니다.

예를 들어, 다음 두 가지 메서드의 시그니처가 다릅니다.

무효 어떻게 좀 해봐.(스트링[] x); // do Something (String [ ] ) 무효 어떻게 좀 해봐.(스트링 x);   // doSomething(문자열) 

다음 2개의 메서드는 모두 같은 시그니처를 가집니다.

인트 어떻게 좀 해봐.(인트 x);                   // doSomething(int) 무효 어떻게 좀 해봐.(인트 y) 던지다 예외.; // doSomething(int) 

줄리아.

Julia에서 함수 시그니처는 다음 형식을 취합니다.

커미션(판매::내부, 평가하다::플로트64)::플로트64 

인수의 유형은 여러 디스패치에 사용됩니다.반환 유형은 함수가 값을 반환할 때 검증되며, 값의 유형이 지정된 유형과 일치하지 않으면 런타임 예외가 발생합니다.

추상 유형은 허용되며 모든 하위 유형에 공통적인 일반적인 동작을 구현하기 위해 권장됩니다.따라서 위의 함수를 다음과 같이 다시 작성할 수 있습니다.이 경우 함수는 이에 따라 Integer 서브타입과 Real 서브타입 중 하나를 받아들일 수 있습니다.

커미션(판매::정수, 평가하다::진짜)::진짜 

function 인수에서는 유형은 완전히 옵션입니다.지정되지 않은 경우 모든 유형의 슈퍼 유형인 Any 유형을 사용하는 것과 동일합니다.인수 유형을 지정하지만 반환 유형을 지정하지 않는 것이 좋습니다.

목표-C

Objective-C 프로그래밍 언어에서는 오브젝트의 메서드시그니처는 인터페이스 헤더파일로 선언됩니다.예를들면,

- (아이디)초기화내부:(인트)가치; 

메서드를 정의합니다.initWithInt일반적인 오브젝트를 반환한다.id1개의 정수 인수를 사용합니다.Objective-C는 시그니처의 타입이 명시적이지 않은 경우에만 필요합니다.id; 이 시그니처는 다음과 같습니다.

- 초기화내부:(인트)가치; 

Rust에서 함수 시그니처는 다음 형식을 취합니다.

fn 수수료(판매: u32, 환율: f64) -> f64;

「 」를 참조해 주세요.

레퍼런스

  1. ^ "C++ Reference: Programming terms". Retrieved 3 December 2013.
  2. ^ Paul Leahy. "Method Signature". About.com Guide. Retrieved 2011-05-31. A method signature is part of the method declaration. It is the combination of the method name and the parameter list.
  3. ^ Mössenböck, Hanspeter (2002-03-25). "Advanced C#: Variable Number of Parameters" (PDF). Institut für Systemsoftware, Johannes Kepler Universität Linz, Fachbereich Informatik. p. 52. Retrieved 2011-08-03.
  4. ^ "Chapter 4. The class File Format". docs.oracle.com. Retrieved 2021-10-17.