서명의 종류
Type signature이 문서에는 텍스트를 검증하지 않는 부적절하거나 잘못 해석된 인용문이 포함되어 있을 수 있습니다.(2021년 ( 템플릿메시지 및 ) |
컴퓨터 과학에서 유형 서명 또는 유형 주석은 함수, 서브루틴 또는 메서드에 대한 입력과 출력을 정의합니다.유형 시그니처는 함수에 포함된 인수의 수, 유형 및 순서를 포함합니다.타입 시그니처는 일반적으로 오버로드된 많은 형식 중에서 호출할 함수의 올바른 정의를 선택하기 위해 오버로드 해결 중에 사용됩니다.
예
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()
메서드에 반환값이 없습니다.
서명
![]() | 이 섹션의 톤 또는 스타일은 Wikipedia에서 사용되는 백과사전 톤을 반영하지 않을 수 있습니다. Wikipedia의 를 하십시오. (2013년 10월) (이 메시지 및 시기 ) |
기능 시그니처는 기능 프로토타입으로 구성됩니다.이름, 범위 및 매개 변수와 같은 함수에 대한 일반 정보를 지정합니다.많은 프로그래밍 언어에서는 컴파일러에서 링커로 더 많은 의미 정보를 전달하기 위해 이름 망글링을 사용합니다.머글링과 더불어 함수 시그니처(대부분의 컴파일러에 내부적으로 저장됨)에 정보가 과잉되어 있어 쉽게 이용할 수 없지만 접근할 [1]수 있습니다.
함수 시그니처의 개념을 이해하는 것은 모든 컴퓨터 과학 연구에서 중요한 개념입니다.
복수의 상속을 실시하려면 예기치 않은 결과를 피하기 위해 함수 시그니처를 고려해야 합니다.
컴퓨터 과학 이론, 특히 다형성의 개념은 함수 시그니처의 개념을 많이 사용한다.
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
일반적인 오브젝트를 반환한다.id
1개의 정수 인수를 사용합니다.Objective-C는 시그니처의 타입이 명시적이지 않은 경우에만 필요합니다.id
; 이 시그니처는 다음과 같습니다.
- 초기화내부:(인트)가치;
녹
Rust에서 함수 시그니처는 다음 형식을 취합니다.
fn 수수료(판매: u32, 환율: f64) -> f64;
「 」를 참조해 주세요.
레퍼런스
- ^ "C++ Reference: Programming terms". Retrieved 3 December 2013.
- ^ 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.
- ^ 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.
- ^ "Chapter 4. The class File Format". docs.oracle.com. Retrieved 2021-10-17.