変数
データの保存と読み取り
プログラムは常に何らかのデータ(情報)を扱い、処理の目的に使用します。データはリテラルだけではその場限りなので、保存する必要があります。
現在はディスクドライブの発達により、誰もが大容量の記録ドライブを手に入れられるようになりました。ただし、プログラムが実行中に一時保存する情報は、データファイルとしてディスクに記録するのではなく、より高速で CPU の近くにある主記憶装置(メインメモリ)に格納されます。
メモリのどこに保存するかは、コンパイラやランタイムが自動的に計算してくれます。私たちは、コード上で保存する記憶領域に名前を付け、アクセスや保存を指示するだけでよいのです。 この保存場所を表す識別子を変数(Variables)と呼びます。
変数の名前は識別子の命名規則に従い、アンダースコアまたはアルファベットから始まり、2 文字目からは数字も使えます。キーワードと同じ名前の識別子は宣言できません。ただし C# では @ 記号を接頭辞に指定することで、キーワードと同じ変数名を作れます。
変数を使用する場合は、まず宣言する必要があります。変数には何でも格納できるわけではなく、保存するデータ型を指定する必要があるのです。
型 変数名 ;
型には、宣言する変数に保存できるデータ型を指定します。変数といっても、宣言する場所によっていくつかの種類があるのですが、この場ではメソッド内で宣言されるローカル変数(Local variables)を前提に解説します。
ローカル変数は、メソッドの中でのみ使える一時的な変数で、宣言された中括弧 { } 内のブロックでのみ使えます。ローカル変数はメソッド内の任意の場所で、上のようなローカル変数宣言文によって宣言できます。
変数の型は、次のようなキーワードが用意されています。保存する必要があるデータを定め、それに合わせて型を宣言します。
型宣言子 | 説明 |
---|---|
object | .NET Framework の System.Object クラスに基く全ての変数の基底オブジェクト型 |
bool | ブール値 (true / false) |
byte | 符号なし8bit整数 |
sbyte | 符号付8bit整数 |
char | 16bit Unicode |
short | 符号付16bit整数 |
ushort | 符号なし16bit整数 |
int | 符号付32bit整数 |
uint | 符号なし32bit整数 |
long | 符号付64bit整数 |
ulong | 符号なし64bit整数 |
float | 32bit浮動小数点 |
double | 64bit浮動小数点 |
decimal | 128bit型。高精度で金融計算に適している |
string | Unicode キャラクタの文字列への参照 |
このうち、object 型の詳細については後ほど紹介するので、今は理解する必要ありません。
例えば、整数を格納する変数は int 型として宣言します。宣言された型によって、コンパイラやランタイムは変数に保存するデータをどのように扱うべきかを判断でき、必要な記憶領域の確保やデータの変換を行います。
int x;
上記は、単純に整数型で x という名前の変数を宣言しています。
型は、データを管理するうえで重要です。例えば、整数と文字列は異なる型なので、整数型の変数に文字列を保存することはできません。また、互換性のない型のデータを計算することもできません。自分が扱っているデータの型を意識することは、とても重要です。
宣言した変数には、その後、変数の型に一致していれば任意のデータを保存できます。変数にデータを格納することを代入と呼びます。変数に新しい値を代入するには代入演算子 = を用います。
変数 = 式
代入演算子 = の左項にはデータの保存先となる変数を、右項には保存する値となる式を指定します。式の詳細については後述するので、この場では前述したリテラルを用いて値を代入しましょう。
class Test { static void Main() { int i; double d; string str; i = 1024; d = 0.015; str = "Kitty on your lap"; System.Console.WriteLine(i); System.Console.WriteLine(d); System.Console.WriteLine(str); } }
コード1では、整数型変数 i、浮動小数点型変数 d、文字列型変数 str を宣言し、それぞれの変数の型に適した値を代入しています。このように変数に値を保存しておくことで、最後に代入した値を後から取得できます。
変数は何度も更新することができます。何らかの値が代入されている変数は、更新すると前の値は上書きされ消えてしまいます。
class Test { static void Main() { string sayaka; sayaka = "奇跡も、魔法も、あるんだよ"; System.Console.WriteLine(sayaka); sayaka = "あたしって、ほんとバカ"; System.Console.WriteLine(sayaka); } }
最初に呼び出した WriteLine() では "奇跡も、魔法も、あるんだよ" が出力され、その後、変数に新しい文字列を代入してから再び WriteLine() で出力しています。この時はすでに "あたしって、ほんとバカ" という文字列になっているので、これが表示されています。
複数の変数を宣言する
ちなみに、型が同じであれば 1 つのローカル変数宣言文で複数の変数を宣言できます。複数の変数を宣言するには、カンマで変数名を区切ります。
型 変数名1, 変数名2, ...
例えば、整数型の変数 x と y の同じローカル変数宣言文で宣言するには、以下のように記述します。
int x, y;
これは、単に 2 つのローカル変数宣言文で x と y をそれぞれ宣言した場合と同じです。
int x; int y;
無理にコードを短くする必要はありませんが、同じ性質をもった関連する変数であれば、同じ宣言文でまとめたほうが関連性を読み取りやすいこともあるでしょう。