型注釈

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

コンピュータサイエンスでは型署名または型注釈は、関数、サブルーチン、またはメソッドの入力と出力を定義します。型シグネチャには、関数に含まれる引数の数、型、および順序が含まれます。型シグネチャは通常、オーバーロードの解決中に、多くのオーバーロードされたフォームから呼び出される関数の正しい定義を選択するために使用されます。

C / C++

CおよびC++では、型シグネチャは一般に関数プロトタイプとして知られているものによって宣言されます。C / C ++では、関数宣言はその使用法を反映していますたとえば、シグニチャを持つ関数ポインタは次のように呼び出されます。 (int)(char, double)

char c ; 
ダブルd ; 
int retVal = * fPtr )(c d );    

Erlang

Erlangでは、型シグネチャはオプションで次のように宣言できます。

--spec function_name type1 ()、type2 ()、...)-> out_type ))。    

例えば:

--spec is_even number ()) - >  boolean ())。}}

Haskell

Haskellの型署名は、通常、次の形式を取ります。

functionName  ::  arg1Type-  >  arg2Type-  >  ...-  >  argNType

結果のタイプは、最初に指定された引数を超えるすべてのものと見なすことができることに注意してください。これはカリー化の結果であり、これはHaskellの第一級関数のサポートによって可能になりますこの関数は2つの入力を必要とし、1つの引数が指定され、関数は「カレー」されて、指定されていない引数の関数を生成します。したがって、、を呼び出すと、を生成するために呼び出すことができる新しい関数が生成されます。 f xf :: a -> b -> cf2 :: b -> cf2 bc

実際の型仕様は、などの実際の型、または、、、、などのパラメトリック多相関数で使用されるInteger一般的な型変数で構成できます。したがって、次のように書くことができます。 abanyTypefunctionName :: a -> a -> ... -> a

Haskellは高階関数をサポートしているので、関数を引数として渡すことができます。これは次のように書かれています: functionName :: (a -> a) -> a

この関数は、型シグネチャを持つ関数を取り込んで、型out のデータを返します。a -> aa

Java

Java仮想マシンでは内部型シグネチャを使用して、仮想マシンコードのレベルでメソッドとクラスを識別します。

例:メソッドバイトコードでとして表されます。 String String.substring(int, int)Ljava/lang/String.substring(II)Ljava/lang/String;

メソッドのシグネチャは次のmainようになります。

public  static  void  main String []  args );

そして、分解されたバイトコードでは、それは次の形式を取りますLsome/package/Main/main:([Ljava/lang/String;)V

メソッドのメソッドシグネチャには、次のmain()3つの修飾子が含まれています。

  • publicメソッドが任意のオブジェクトから呼び出せることを示します。main()
  • staticメソッドがクラスメソッドであることを示します。main()
  • voidメソッドに戻り値がないことを示します。main()

署名

関数シグネチャは、関数プロトタイプで構成されます。名前、スコープ、パラメーターなどの関数に関する一般的な情報を指定します。多くのプログラミング言語は、コンパイラからリンカにさらに多くのセマンティック情報を渡すために名前マングリングを使用します。マングリングに加えて、関数シグニチャ(ほとんどのコンパイラに内部的に格納されている)には、すぐには利用できないがアクセスできる過剰な情報があります。[1]

関数シグネチャの概念を理解することは、すべてのコンピュータサイエンス研究にとって重要な概念です。

多重継承の実践では、予測できない結果を回避するために関数のシグネチャを考慮する必要があります。

コンピュータサイエンス理論、特にポリモーフィズムの概念は、関数シグネチャの概念を多く利用しています。

Cプログラミング言語では、署名はそのプロトタイプ定義とほぼ同等です。

「署名」という用語は、コンピュータサイエンスで他の意味を持つ場合があります。

  • ファイル署名は、ファイルの内容を識別または検証できます。
  • データベース署名は、データベースのスキーマまたはバージョンを識別または検証できます。
  • プログラミング言語MLファミリでは、「署名」は、インターフェイスの役割を果たすモジュールシステムの構成を参照するキーワードとして使用されます

メソッドシグネチャ

コンピュータプログラミング、特にオブジェクト指向プログラミングでは、メソッドは通常、その一意のメソッドシグネチャによって識別されます。これには通常、メソッド名、およびそのパラメータの数、タイプ、順序が含まれます。[2]メソッドシグネチャは、メソッドの最小タイプです。

C / C++

C / C ++では、メソッドシグネチャはメソッド名とそのパラメーターの数とタイプですが、値の配列で構成される最後のパラメーターを持つことができます。

int printf const char * ... );    

これらのパラメータの操作は、標準ライブラリヘッダーのルーチンを使用して実行できます<stdarg.h>

C#

Cの構文と同様に、C#のメソッドシグネチャは、名前とそのパラメーターの数とタイプで構成されます。最後のパラメーターは値の配列である可能性があります。[3]

void  Add out  int  sum  params  int []  value ); 
[ ... 
]追加合計3、5、7、11 -1 ; _  _ _ _ _ //合計==25       

Java

Javaでは、メソッドシグネチャは、名前とそのパラメータの数、タイプ、および順序で構成されます。戻り型とスローされた例外は、メソッドシグネチャの一部とは見なされず、パラメーターの名前も考慮されません。これらは、メソッドの一意性をチェックするためにコンパイラーによって無視されます。

メソッドシグネチャは、クラス内のオーバーロードされたメソッド(同じ名前のメソッド)を区別するのに役立ちます。リターンタイプはオーバーロードに含まれていません。オーバーロードされたメソッドを区別するには、メソッドシグネチャのみを使用する必要があります。[4]

たとえば、次の2つのメソッドのシグネチャは異なります。

void  doSomething String []  x );  // doSomething(String [])
void  doSomething String  x );    // doSomething(String)

次の2つのメソッドはすべて同じ署名を持っています。

int  doSomething int  x );                    // doSomething(int)
void  doSomething int  y )は 例外をスローします ; // doSomething(int) 

ジュリア

Juliaでは、関数のシグネチャは次の形式を取ります。

手数料販売:: Int  レート:: Float64 :: Float64

引数の型は、多重ディスパッチに使用されます。関数が値を返すときに戻り型が検証され、値の型が指定された型と一致しない場合は実行時例外が発生します。

抽象型は許可されており、すべてのサブタイプに共通する一般的な動作を実装することをお勧めします。したがって、上記の関数は次のように書き直すことができます。この場合、関数はそれに応じて任意の整数および実数のサブタイプを受け入れることができます。

手数料販売::整数 レート::実数::実数

関数の引数では、型は完全にオプションです。指定しない場合は、すべてのタイプのスーパータイプであるタイプAnyを使用するのと同じです。引数の型を指定するのは慣用的ですが、型を返すことはありません。

Objective-C

Objective-Cプログラミング言語では、オブジェクトのメソッドシグネチャはインターフェイスヘッダーファイルで宣言されます。例えば、

-  id initWithInt:int value ;

一般オブジェクト(an )を返し、1つの整数引数を取るメソッドを定義します。Objective-Cでは、署名の型が明示的でない場合にのみ、型が明示的である必要があります。この署名は同等です: initWithIntidid

--initWithInt  int value ;

さび

Rustでは、関数のシグネチャは次の形式を取ります。

fn コミッション販売u32 レートf64  -> f64 ;  

も参照してください

参照

  1. ^ 「C++リファレンス:プログラミング用語」2013年12月3日取得
  2. ^ ポールリーヒー。「メソッドシグネチャ」http://www.about.com/:About.comガイド2011年5月31日取得メソッドシグネチャは、メソッド宣言の一部です。メソッド名とパラメータリストの組み合わせです。 {{cite web}}:(ヘルプ外部リンク|location=
  3. ^ Mössenböck、Hanspeter(2002-03-25)。「高度なC#:可変数のパラメーター」(PDF)http://ssw.jku.at/Teaching/Lectures/CSharp/Tutorial/:InstitutfürSystemsoftware、JohannesKeplerUniversitätLinz、FachbereichInformatikp。52 2011年8月3日取得 {{cite web}}:(ヘルプ外部リンク|location=
  4. ^ 「第4章クラスファイル形式」docs.oracle.com 2021-10-17を取得