私は、define、declare、および assign という言葉を同じ意味で使用する傾向がありますが、これは気分を害する人もいるようです。これは正当化されますか?初めて変数に代入するときのみ、declare という単語を使用する必要がありますか? それともそれ以上のものがありますか?
8 に答える
定義とは、値または関数が記述される場所です。つまり、コンパイラーまたはプログラマーは、それが何であるかを正確に伝えられます。
int foo()
{
return 1;
}
int var; // or, e.g. int var = 5; but this is clearer.
宣言は、関数または変数が存在することをコンパイラーまたはプログラマーに通知します。例えば
int foo();
extern int var;
割り当てとは、変数に値が設定されている場合で、通常は=演算子を使用します。例えば
a = b;
a = foo();
定義と宣言は似ていますが、割り当ては大きく異なります。
ここで、変数を宣言 (または定義) しています。
int x;
ここで、その変数に値を割り当てています。
x = 0;
ここでは、1 つのステートメントで両方を実行しています。
int x = 0;
ノート
すべての言語が 1 つのステートメントでの宣言と代入をサポートしているわけではありません。
T-SQL
declare x int;
set x = 0;
一部の言語では、宣言時に変数に値を割り当てる必要があります。この要件により、言語のコンパイラまたはインタープリターは、変数の型を推測できます。
パイソン
x = 0
正しい用語を使用することが重要です。そうしないと、人々はあなたが何について話しているのかわからないか、あなたが何について話しているのかわからないと誤って思い込んでしまいます。
これらの用語は、多くの場合、さまざまな言語の標準で正確な意味を持っています。その場合、それらは混同されるべきではありません。
たとえば、cでは:
関数は一度だけ定義できますが (何をするかを言うとき)、その前に宣言することもできます (どの引数を取り、どの型を返すかを言うとき)。
同様に、変数の型を指定すると変数が宣言されますが、これはスコープごとに 1 回だけ行われます。ただし、値を繰り返し割り当てることはできます。(言語によっては、初期化(宣言時に変数に値を与える) と代入(後で値を変更する)も区別されます)。
違いは微妙に見えるかもしれませんが、重要です。すべての言語が同じ区別をするわけではありませんが、C ++では、変数宣言により、変数の型と名前がコンパイラーに認識されます。
int i;
変数定義は、ストレージを割り当て、変数の初期値を指定します。
i = 1;
一般的に行われているように、変数の宣言と定義を1つのステートメントに組み合わせることができます。
int x = 1;
a
関数内で変数を宣言すると、変数用のメモリも確保されるため、次のコードでは、宣言の一部として変数を暗黙的に定義しています。
int main()
{
int a;
return 0;
}
変数a
はコンパイラによって自動的に定義されるため、割り当てられたメモリ位置にあった値がすべて含まれます。これが、既知の値を明示的に割り当てるまで自動変数を使用することが安全ではない理由です。
プログラムで変数の値を変更すると、いつでも割り当てが行われます。
x = 2;
x++;
x += 4;
関数宣言は、変数宣言と同様に、関数シグネチャをコンパイラに認識させます。これにより、コンパイラエラーを発生させることなく、定義する前にソースコードで関数を呼び出すことができます。
int doSomething(float x);
関数定義は、関数の戻りタイプ、名前、パラメーターリスト、および命令を指定します。これらの要素の最初の3つは、関数宣言と一致する必要があります。関数は、特定のプログラムで1回だけ定義する必要があります。
int doSomething(float x)
{
if( x < 0 )
{
x = -x;
}
return static_cast<int>(x);
}
関数decalartionと定義を1つに組み合わせることができますが、プログラム内のどこかで関数を呼び出す前に行う必要があります。
一般的な役割: 定義 = 宣言 + 予約済みスペース。
定義、宣言、代入には 2 つのケースがあります。
- 変数用。
- 関数用。
変数の場合:
--定義:
変数用にメモリを予約するようにコンパイラに指示します。
int x;
--宣言:
変数が別の場所で定義されていることをコンパイラに通知します。
extern int x;
--割り当て:
変数に値を入れるようにコンパイラに指示します。
x = 0;
関数の場合:
--定義:
int functionDef(int x){
int x;
...
...
...
return x;
}
--宣言: 関数の単なるプロトタイプです。
int functionDef(int x);
正解は、話している言語によって異なります。コンピュータ言語には、言語仕様または言語を中心に成長したコミュニティのいずれかのために、特定の用語が使用されることがよくあります。COBOLは、私が使用したときは、より主流の言語とはかなり異なる用語を使用していました(主流のビジネスではなく、言語開発の主流に近い言語という意味で)。Forthはいくつかの奇妙な用語を開発しました。
あなたが英語を知っているなら、あなたは通常、単語がその通常の意味から何を意味するかについて良い考えを得ることができますが、それをあまり頼りにしすぎないでください。同じことが、言語間または言語コミュニティ全体の特定の単語にも当てはまります。
言われているように、それは言語に依存するかもしれません。授業などに使われる言葉かどうかで大きく変わると思います。ここで説明するほとんどのデータ型について、この質問はあまり関係がないかもしれません。C++ (「c++ - 定義と宣言の違いは?」を参照) では、クラスまたは構造体は常に正確に 1 つの定義を持ちますが、0 回以上宣言することができます。定義なしでクラスを宣言することはできません。したがって、「宣言された」は「使用された」と同義かもしれません。
ほとんどの言語では、整数などの単純な型は、クラスのように定義する必要はありません。