7

Gilles Dowekのプログラミング言語の原則を読んでいます:

彼は、初期値を与えずに変数を宣言することも可能であり、初期値なしで宣言され、値が割り当てられていない変数を使用しないように注意する必要があると述べています。これにより、エラーが発生します。

注:この本の著者は、Java で初期値なしで変数を宣言する可能性について言及しています。

では、なぜこの変数の宣言が有効なのでしょうか? いつ使うの?

4

8 に答える 8

8

たとえば、次のようなものがあります。

int i;
if (first_condition)
    i = 1;
elseif (second_condition)
    i = 2;
else
    i = 0;

変数をif後で使用するには、外部で宣言する必要がありますが、その値はif条件内で固定されています。

于 2012-12-09T14:01:50.267 に答える
8

多くの異なる言語にはさまざまな理由があります。

メモリ
変数を宣言するとき、変数を保持するためのメモリが必要です。これには、オペレーティング システムのカーネルにメモリを要求するか、メモリを追跡するある種の監視プログラムが必要です。要するに、これは高価な操作になる可能性があります。したがって、多くの場合、オブジェクトに必要なすべてのメモリを同時に割り当て、後で割り当てる必要がある値を割り当てることが望ましいです。このようにして、重要な部分でプログラムのパフォーマンスを向上させることができます。この使用例は、初期化なしで宣言を許可する機能が許可されるほど一般的です。ただし、他のすべてのケースでは、代入中に変数を初期化する必要があることをお勧めします。

メモリ割り当てを官僚機構と考えてください。ペーパーワークが多すぎる。したがって、後で大量のメモリを使用することがわかっている場合は、次回カーネルに毎回要求するのではなく、1 回のトランザクションで事前に大量のメモリを要求します。

高価
な初期化 この点は、上記の点と非常によく似ています。100万×100万の配列があるとします。このような配列の初期化は、コストのかかる手順です。デフォルトでこれを行うのはばかげているため、メモリが割り当てられ、必要に応じて使用されるような機能です。

ここでは、何かを構築するために膨大な量のレゴブロックを購入しているようなものですが、デフォルトのスパイダーマンの形でそれらを購入したいと考えています. とにかく後でそれらを再形成しようとしているときに、店主またはあなたはそれらをスパイダーマンの形にするのに非常に苦労する必要があります.

于 2012-12-09T15:22:45.950 に答える
3

変数を宣言して初期化する (初期値を割り当てる) ときに何が起こるかを実際に見ると、マシン命令レベル、または Java のバイトコードでは、これらの両方でかなりの量の計算能力が使用されていることがわかります。ステップ。

  1. 変数の宣言は、メモリの割り当て、要求された型のインスタンスの作成などを意味します
  2. 次に、メモリのその場所を初期化すると、デフォルト値が 0 の場合に 0 で埋めるなど、割り当てられたメモリの場所にデフォルト値を移動するための処理がさらに必要になります。任意のパターン、前の値が残されている)

そのため、ユーザーが最初に変数の型に許容される値を指定せずに無意識のうちに変数を使用すると、そこにあった値が正しくない場合にエラーが発生する可能性があります。

したがって、言語が宣言時に変数を初期化することを強制する (またはそれ自体で行う) 場合、エラーが発生する可能性は低くなりますが、実際には望んでいないことのために処理能力を浪費している可能性があります。

一方、変数を初期化せずに宣言できる場合は、制御が可能になり、計算能力をいくらか節約できますが、エラーが発生する可能性があります。(変数の初期値が他の条件に依存し、それに応じて変数を考慮して割り当てるシナリオがあると仮定します。そのような場合、宣言で変数を初期化すると、処理能力が無駄になる可能性があります)。

言語は、どの道を進みたいかを決定しますが、ほとんどの場合、その能力をどのように考えているかによって異なります。

プログラマーに制御を与える機会を与え、高度に最適化されたプログラムを作成する場合は、通常、初期化せずに vars を宣言するだけでなく、より多くのものを許可します。

しかし、その言語がプログラマーにエラーのないプログラムをより多く書くことを強制するものである場合、それは別の道をたどるでしょう。

于 2012-12-09T14:23:52.793 に答える
1

たとえば、検証スクリプトで空の var を宣言できます。

$error='';
if(empty($_POST['first_name']{
$error=$error."You did not enter a name";

}

このようなものですが、上記のように、直後のコードがそれを再宣言した場合にのみ使用し、「置き忘れ」ないようにします。

于 2012-12-09T14:07:53.953 に答える
0

何かのようなもの:

//declare without giving value.
int i;

//set value
i=9;
于 2012-12-09T14:02:17.217 に答える