変数についての重要な点は以下になります。
- 変数には様々な値を代入できる
- 変数の名前には、識別子を使う
- 変数は型と名前(識別子)を指定して宣言する
- 変数には、「=」を使って値を代入する
- 変数を初期化すると、宣言と値の代入が同時にできる
- 変数の値を上書きし、その変数の値を変更できる
- 変数の値を他の変数に代入できる
- null は何もないことを示す特別な値
それでは、プログラミングの基本となる変数について解説していきます。
変数とは
変数とは、値を入れておく「箱」のこと
プログラムは、プログラマが入力した値や必要な値をデータを記憶しながら処理を実行します。
この値を記憶させておく機能のことを、変数と呼びます。
変数はメモリを使って記憶し何らかの値を入れておく「箱」といえます。
識別子とは
識別子とは、変数の名前のこと
変数には「型」「名前」があります。
変数名は、基本的に自由に決めることができます。
このように、プログラマ自身がつけることのできる名前のことを、識別子と呼びます。
自由に決めれるので、わかりやすい名前にしないと見直す際などに何のための変数かがマジでわからなくなるので注意!
■識別子の特徴
- 1文字目に数字は使えない
- 半角の英数字と「 _ 」で表現することができる
- 大文字と小文字のは区別される
- C#がもうすでに使っている文字はつかえない(void, static とか)
- 文字の長さに制限はない。が、長いとわかりずらい。
- 特殊な記号は使えない。「 – 」など
■現場での変数名のつけ方
会社や案件ごとの「コーディング規約」「命名規則」にそって変数名もきめます。
プログラマの一人一人がつけやすい名前などつけていってしまうと、統一性のない本当に見にくい、醜いプログラムが出来上がってしまい、可読性や保守性が著しく落ちたシステムの出来上がりです。
その時は最悪いいかもしれませんが、保守や改修、機能追加などでプログラムに改めて手を加える際に担当者から悲鳴があがってきそうですねw
型とは
型とは、値を入れておく箱の種類のこと
扱う値の種類に合わせて変数の型が用意されています。
値の種類は、データ型、または型と呼びます。
■データ型について
データ型には、数値型、論理型、文字型、文字列型があります。
各型にはデータの範囲があり、範囲を超えた値は変数に保存することはできません。
下記の図のように方は複数存在するので、箱の種類を用途に応じて使い分ける必要があります。
※文字型のcharを記述する際は文字を「 ‘ (シングルクオーテーション)」で囲います。
※文字列型のstringを記述する際は文字を「 ” (ダブルクォーテーション)」で囲います。
※練習時によく使う型は行の色を変えてあります。
変数の宣言
変数は型と識別子を決めて宣言する
変数を使うためには、変数を宣言する必要です。
変数を宣言することで、メモリ上に値を記憶する場所が確保されます。
■宣言方法
宣言の基本の書き方は「型名 識別子(変数名);」です。
「型」と「識別子(ここでは変数名)」を指定し、1文の最後に「;」をつけます。
例)
- string str; ← これは、string型 の 変数str を意味します。
- char c; ← これは、char型 の 変数c を意味します。
- int num; ← これは、int型 の 変数num を意味します。
変数の初期値
変数を宣言すると、メモリ上に値を記憶する場所が確保されます。
宣言したときは変数(箱)の中身は何がはいっているの?という疑問が生まれなかったり生まれたりすると思います。
では変数が宣言された瞬間には何がはいっているんでしょうか?空っぽなんでしょうか??
じつはC#では型ごとに決められた値がデフォルト値として記憶されています。
型ごとのデフォルト値は以下の図を参照してください。
値の代入
変数宣言後に値を変数に記憶させることを代入といいます。
代入する際は下記のように「 = 」を使います。
変数 = 値;
下記はint型の変数に値10をいれる例です。
このように値を代入することができますが、型と値が一致する必要があります。
「 = 」の左側にある変数に、右側の値を代入します。
int num; //int型の変数numを宣言
num = 10; //変数numに値の10を代入
最初は戸惑いがちですが、プログラムで使う「 = 」は一般的な「同一」とか「等しい」という意味ではなく値を代入させるという意味になります。
「同一」「等しい」という意味の書き方はきちんと存在しているので、あとで説明しますね。
値の出力
次は、値の出力方法になります。
基本的な出力方法は下記のコードになります。これで「10」と出力されます。
int num; //int型の変数numを宣言
num = 10; //変数numに値の10を代入
Console.WriteLine(num);
ただこれだと、変数に入ってる値のみしか表現できないですね。
もっとわかりやすく出力するために、下記にような3つの出力方法があります。
3つの方法は全て同じ内容を出力します。「変数numの値は10です。」
①挿入文字列を使った出力方法
int num; //int型の変数numを宣言
num = 10; //変数numに値の10を代入
Console.WriteLine($"変数numの値は{num}です。"); //太文字のnumが変数です。
文字列の先頭に$をつけることで、文字列の中の「 { } 」で囲まれた変数名の部分を、変数内の値に置き換えて出力します。
②複合書式指定を使った出力方法
int num; //int型の変数numを宣言
num = 10; //変数numに値の10を代入
Console.WriteLine("変数numの値は{0}です。", num); //太文字のnumが変数です。
文字列の中に波かっこと数字「 {0} 」を指定します。
数字は、パラメータ指定子と呼び、文字列の後ろの「, (カンマ)」に続く変数名の何番目の値を当てはめるかを指定します。
③文字列連結を使った出力方法
int num; //int型の変数numを宣言
num = 10; //変数numに値の10を代入
Console.WriteLine("変数numの値は" + num + "です。"); //太文字のnumが変数です。
+演算子を利用して文字列の足し算をしています。
変数名は、「”」で囲まないように注意してください。
「”」で囲むと、実行画面には値を表す「10」ではなく、変数名の「num」がそのまま出力されてしまいます。
Console.WriteLine("変数numの値は + num + です。");
これだと、「変数numの値は + num + です。」と出力されちゃいます。
変数の初期化
変数の初期化とは、変数宣言時に初期値を代入すること
変数宣言と値の代入を1行で同時に表現するですね。
型名 変数名 = 式;
下記のコードでは、変数numを10で初期化しています。
int num = 10;
また、型によって初期化方法に決まりがあるので説明していきます。
■数値型の初期化(代入)
int num = 10; //OK
int no = "10"; //NG
int型にあった値を代入しましょう。
int型は数値型ですので、”10″のようなダブルクオーテーションで囲まれている文字列型の値を直接代入することは出来ません。
■文字型の初期化(代入)
char c = 'A'; //OK
char ch = 10; //NG
char型にあった値を代入しましょう。
char型は文字型ですので、10のような数値型を直接代入することができません。
■文字列型の初期化(代入)
string str = "hello"; //OK
string str = 10 //NG
string型にあった値を代入しましょう。
string型は文字列型ですので、10のような数値型を直接代入することができません。
■論理型の初期化(代入)
bool flg = true; //OK
bool check = "true" //NG
bool型にあった値を代入しましょう。
bool型は論理型ですので、”true”のようなダブルクオーテーションで囲まれている文字列型の値を直接代入することは出来ません。
bool型は「true」「false」の2種類のみ代入可能です。
変数の値の変更
同じ名前の変数は同時には存在できません。同じ変数を再利用する際は下記のように書きます。
int num = 10; //int型の変数numを宣言し、10で初期化
Console.WriteLine($"変数numの値は{num}です。");
num = 5; //5で変数numの中の値を変更(上書き) ※これ以降numの中身は5になります。
Console.WriteLine($"変数numの値は{num}です。");
■出力結果
「変数numの値は10です。
変数numの値は5です。」
ソースコードは基本的に上から順に処理されていきます。
値が代入されている変数に、新たに値を代入すると、後で代入された値に変更(上書き)されます。
変数を値として代入
「変数の値の変更」の応用編です!
今までは値の代入、変更時に「 = 」の右側に数値などの値を書いていましたが、右側にも変数を書くことができるってことです。
だんだん混乱してきましたね。下記のコードをご確認ください。
int num1 = 1;
int num2 = 2;
int num3 = 3;
Console.WriteLine($"変数num1の値は{num1}です。");
num2 = num3; //変数num3の値を、変数num2へ代入しています。
Console.WriteLine($"代入後の変数num2の値は{num2}です。");
num3 = num1; //変数num1の値を、変数num3へ代入しています。
Console.WriteLine($"代入後の変数num3の値は{num3}です。");
■出力結果
「変数num1の値は1です。
代入後の変数num2の値は3です。
代入後の変数num3の値は1です。」
このように、変数の値を他の変数に代入できます。
num3 の内容をnum3に代入した時点では、num2 と num3 の値は同じになります。
また、さらに応用編として、下記のようなことも可能です。
int num1 = 1;
int num2 = 2;
int num3 = 3;
Console.WriteLine($"変数num1の値は{num1}です。");
num2 = num3 + 1; //変数num3の値にプラス1した値を、変数num2へ代入しています。
Console.WriteLine($"代入後の変数num2の値は{num2}です。");
Console.WriteLine($"変数num3の値は{num3}です。");
■出力結果
「変数num1の値は1です。
代入後の変数num2の値は4です。
変数num3の値は3です。」
num2 = num3 + 1; この記述でnum2に「3+1」の4が代入されます。
が、num3の中の値は「3」のままです。あくまでnum3の値にプラス1した値をnum2に代入なので、num3の値は変動しません。
変数の有効範囲(スコープ)
変数の利用できる範囲を、変数のスコープと呼びます。
今後勉強をしていくと、いろいろな種類のブロックや変数宣言の方法が出てきますが、ここではまず「変数は、宣言後から宣言したブロック内の終わりまで利用できる」と覚えておきましょう。
なんども言うようですが、プログラムは基本上から下に処理がながれます。
なので、今の処理の位置から上の処理はもう通ってきたので変数の使いまわしなどが可能ですが、今の処理の位置らかさらに下の位置らにある変数などは使用できないのです。
コメント