※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

変数とは?


変数とは、プログラムの中で使用する、数値や文字などの記憶場所です。

たとえば、以下のプログラムではxが変数です。

//xというint型の変数を宣言
int x;
//変数xに3という値を入れる
x = 3; 
(注意:スラッシュ二つ(//)から始まる行は、コメントです。この行はプログラムとして実行されませんが、人間が読むときに、プログラムをわかりやすくしたり、注意書きを入れるために書きます。この行がなくても動きます。)

C#では、変数を使用する前に変数の「宣言」が必要です。

宣言は、
型名 変数名;
という書き方をします。「プログラム中で、こういう型でこういう名前の変数を使います。」という意味です。

上のプログラムでは、
int x;
という行が宣言です。intが型名で、xが変数名です。ちなみにxは、私が適当に付けた変数名なので、yでも良いし、numでも良いし、qwwertyuiasdfghjklでも良いです。宣言によって変数に具体的な名前が付けられるわけです。
(ただし、実際のプログラム開発では、他人が見てもわかりやすいように、意味のある名前を付けましょう。)

ついでに、最後のセミコロン(;)ですが、これは一文の終わりを意味します。日本語の句点(。)とか、英語のピリオド(.)とかと似たようなものです。

さて、変数の名前は、宣言によってプログラマが決めますが、型名の方はそうはいきません。

型とは?


型とは、どういう値が格納可能なのかを示しています。
例えば
  • int には数値
  • string には文字列
  • DateTime には日付・時間
などというふうに、その型の変数には、入れられるものが決まっています。

そのため、

int x;
x = "こんにちは";

という記述はできません。xはint型の変数なので、入れられるのは数値だけであり、「"こんにちは"」は、数値ではなく文字列だからです。

型名は変数名のように宣言箇所で勝手に命名することはできません。とは言うものの、宣言箇所ではダメですが、自分で命名した型を用意しておいてそれを使うことは可能です。この辺の説明は、ちょっと難しいので後にします。

代入

x = 3;
という記述ですが、これは代入です。
イコール記号(=)には、左辺を右辺に代入するという意味があります。
気を付けて欲しいのですが、算数や数学の左辺と右辺が等しいという意味のイコール記号とは全く違います。

int x;
x = 3;
x = x + 5;

算数や数学では、x = x + 5などというわけのわからん式は成り立ちませんが、プログラムでは成り立ちます。
これはプログラムとしては、「2行目までのxに5を足した値を、xに入れ直しなさい」という命令として扱われるからです。

ところでC#の変数には、値型と参照型の2種類があり、この2種類において、代入の意味も異なります。

値型


値型に当たる型は、bool、int、long、float、doubleなどの真偽値や数値を格納する型、および構造体です。
値型の変数は、変数の宣言によってその型分のメモリが確保され、変数への代入では、値が直接格納されます。

//この宣言で4バイト分の領域が確保される
int x;
//数値を代入する
x = 3;

さっきまでと同じですが、このプログラムでは、宣言した変数そのものに3という値を格納します。

これはわかりやすいですが、参照型がちょっと難しいです。


参照型


参照型の変数に当たる型は、クラスや配列です。
参照型では、変数の宣言によってオブジェクト分のメモリ領域は確保が確保されるわけではありません。参照型の変数にはオブジェクトへの位置情報が格納されるだけで、実体は別に生成する必要があります。Windowsのショートカットファイルが、別の場所に存在する実際のファイルへリンクしているに過ぎないというのに似ています。

//JapaneseCalendar型の変数を宣言
JapaneseCalendar x;
//JapaneseCalendarの実体を作成して変数に参照をセット
x = new JapaneseCalendar();

JapaneseCalendarは和暦を司るクラスですが、参照型の例として出しただけなので、これが何ものなのかは気にしないでください。

このプログラムでは、newキーワードを使用したnew JapaneseCalendar()という記述で実体ができあがり、イコール記号によって作った実体の位置情報をセットをします。重要なのは、この場合のイコール記号は、値型の変数への代入と違い、xにJapaneseCalendarの実体そのものを格納しているのではないということです。リンク先を設定するようなイメージで捕らえると良いと思います。

さてさて、最後は何だか難しい話になってしまいました。今は良くわからなくても気にしないで良いです。ただし、重要な概念なので、何だか意味不明だったけど、「値型」と「参照型」という区別があったなぁくらいには覚えておいてください。



名前:
コメント: