宣言(コンピュータプログラミング)

コンピューター プログラミングでは宣言は識別子のプロパティを指定する言語構造体です。つまり、単語 (識別子) の意味を宣言します。[1]宣言は、関数変数定数、およびクラスに最も一般的に使用されますが、列挙や型定義などの他のエンティティにも使用できます。 [1]名前 (識別子自体) やエンティティの種類 (関数、変数など) のほかに、宣言では通常、データ型(変数および定数の場合) または型シグネチャ(関数の場合) を指定します。型には、配列などの次元も含まれる場合があります。宣言は、エンティティの存在をコンパイラに通知するために使用されます。これは、関数、変数、定数、およびそれらの型を使用前に宣言で指定する必要がある、厳密に型指定された言語では重要であり、前方宣言で使用されます。[2]「宣言」という用語は「定義」という用語と対比されることがよくあります[1]が、その意味と使用法は言語によって大きく異なります。以下を参照してください。

宣言は、 BCPLファミリ、最も顕著なCおよびC++、およびPascalなど、 ALGOL伝統の言語で特に顕著ですJava では「宣言」という用語が使用されますが、Java では個別の宣言と定義は必要ありません。

宣言と定義

基本的な二分法の 1 つは、宣言に定義が含まれるかどうかです。たとえば、変数または定数の宣言がその値を指定するか、その型のみを指定するかです。同様に、関数の宣言で関数の本体 (実装) を指定するのか、それともその型シグネチャのみを指定するのかも指定します。[1]すべての言語がこの区別を行うわけではありません。多くの言語では、宣言には常に定義が含まれており、言語に応じて「宣言」または「定義」と呼ばれることがあります。[a]ただし、これらの概念は、使用前に宣言が必要な言語 (前方宣言が使用される言語) と、インターフェイスと実装が分離されている言語 (インターフェイスには宣言が含まれ、実装には定義が含まれます) では区別されます。[b]

非公式な使用法では、「宣言」は純粋な宣言 (型のみ、値や本体は含まない) のみを指しますが、「定義」は値または本体を含む宣言を指します。ただし、正式な使用法 (言語仕様) では、「宣言」にはこれらの意味の両方が含まれますが、言語によってより細かく区別されます。C および C++ では、本体を含まない関数の宣言は関数プロトタイプと呼ばれます。本体を含む関数の宣言を「関数定義」と呼びます。 Java では、宣言は 2 つの形式で行われます。パブリック メソッドの場合は、メソッド名、入力タイプ、出力タイプで構成されるメソッド シグネチャとしてインターフェイスに提示できます。同様の表記法は、定義を含まない抽象メソッドの定義でも使用できます。囲んでいるクラスはインスタンス化できますが、クラスのインスタンスを作成するには、メソッドの定義を提供する新しい派生クラスを作成する必要があります。 Java 8以降、ラムダ式が言語に組み込まれ、関数宣言と見なすことができました。

宣言と定義

C ファミリのプログラミング言語では、多くの場合、宣言はヘッダー ファイルに収集されます。ヘッダーファイルは、これらの宣言を参照および使用する他のソース ファイルに含まれますが、定義にはアクセスできません。ヘッダー ファイル内の情報は、宣言を使用するコードとそれを定義するコード間のインターフェイス、つまり情報隠蔽の形式を提供します。宣言は、さまざまなソース ファイルまたはライブラリで定義された関数または変数にアクセスするためによく使用されます。定義型と宣言型が一致しない場合、コンパイラ エラーが発生します。

変数の場合、定義では、宣言フェーズ中に予約されたメモリ領域に値が割り当てられます。関数の場合、定義により関数本体が提供されます。変数または関数は何度も宣言できますが、通常は 1 回定義されます ( C++では、これはOne Definition Rule (ODR) と呼ばれます)。

JavaScriptPythonなどの動的言語では、通常、関数の再定義、つまり再バインドが可能です。関数は、他の関数と同様に、名前と値 (定義) を持つ変数です。

C での定義ではない宣言の例をいくつか示します。

extern char example1 ; extern int example2 ; void例 3 ( void );  
  
 

ここでも C での定義である宣言の例をいくつか示します。

文字例1 ; /* 関数定義の外では、ゼロに初期化されます。 */ int example2 = 5 ; void example3 ( void ) { /* 中かっこ間の定義 */ }  
   
    

未定義の変数

一部のプログラミング言語では、コンパイル時にそのような変数が初めて検出されたときに、暗黙的な宣言が提供されます。他の言語では、このような使用法はエラーとみなされ、診断メッセージが表示される場合があります。一部の言語は暗黙的な宣言動作で始まりましたが、成熟するにつれて、それを無効にするオプションを提供しました (たとえば、Perlの " use strict" やVisual Basicの " Option Explicit")。

こちらも参照

ノート

  1. ^ たとえば、Java では「宣言」(クラス宣言、メソッド宣言)が使用されますが、Python では「定義」(クラス定義、関数定義)が使用されます。[3]
  2. ^ この区別は、Pascal の「ユニット」(モジュール)、および主に純粋な宣言で構成されるヘッダー ファイルと定義で構成されるソース ファイルを持つ従来の C および C++ コード構成で観察されますが、これは常に厳密に観察されたり強制されたりするわけではありません。言語によって。

参考文献

  1. ^ abcd "宣言は、一連の識別子の解釈と属性を指定します。識別子の 定義は、次のような識別子の宣言です。
    • オブジェクト [変数または定数] の場合、そのオブジェクト用にストレージが予約されます。
    • 関数の場合、関数本体が含まれます。
    • 列挙定数の場合、識別子の (唯一の) 宣言です。
    • typedef 名の場合、識別子の最初 (または唯一) の宣言です。」
    C11 仕様、6.7: 宣言、パラグラフ 5。
  2. ^ マイク・バナハン。 「2.5. 変数の宣言」。 GBダイレクト2011 年 6 月 8 日に取得[A] 宣言 [...] は、何かの名前と型のみを導入しますが、ストレージは割り当てません [...]。
  3. ^ 7. 複合ステートメント、Python 言語リファレンス

外部リンク

  • C および C++ での宣言と定義、Alex Allain
  • 8.2.宣言、定義、およびアクセシビリティ、The C Book、 GBdirect
  • 宣言と定義 (C++)、MSDN
    「宣言は、プログラム要素または名前が存在することをコンパイラーに伝えます。定義は、その名前がどのようなコードまたはデータを表すかを指定します。」
「https://en.wikipedia.org/w/index.php?title=宣言_(コンピュータープログラミング)&oldid=1106990243」から取得