C# Variables完全ガイド|変数の宣言・型・代入・スコープを初心者向けにわかりやすく解説
はじめに
C#でプログラミングを始めると、最初に学ぶことになるのがVariables(変数)です。変数は、数値や文字列などのデータを一時的に保存し、必要なときに取り出して使用するための仕組みです。
たとえば、ユーザーの名前、商品の価格、ゲームのスコアなど、プログラム内で扱うデータの多くは変数に保存されます。変数を正しく理解することは、条件分岐や繰り返し処理、メソッド、クラスといったC#の重要な機能を学ぶうえでも欠かせません。
この記事では、C# Variablesの基本として、変数の意味、宣言方法、データ型、値の代入について、初心者にもわかりやすく解説します。
1. C#のVariables(変数)とは
C#のVariablesとは、プログラム内で使用するデータを保存するために用意された領域のことです。日本語では「変数」と呼ばれます。
変数には名前を付けることができ、その名前を使って保存したデータを参照したり、別の値に変更したりできます。
C#int age = 20;
Console.WriteLine(age);
このコードでは、ageという変数に整数の20を保存しています。Console.WriteLine(age);を実行すると、変数に保存されている値が画面に表示されます。
実行結果は次のとおりです。
20
1-1. 変数はデータを一時的に保存するための入れ物
変数は、データを一時的に保存するための「入れ物」と考えると理解しやすくなります。
たとえば、年齢を保存する入れ物には整数を入れ、名前を保存する入れ物には文字列を入れます。
C#int age = 25;
string name = "田中";
このコードでは、次の2つの変数を使用しています。
ageには整数の25を保存nameには文字列の"田中"を保存
保存した値は、変数名を指定することで何度でも利用できます。
C#int age = 25;
string name = "田中";
Console.WriteLine(name);
Console.WriteLine(age);
変数に保存されている値は、プログラムの処理中に変更することも可能です。
C#int score = 10;
score = 20;
Console.WriteLine(score);
実行結果は次のようになります。
20
最初に保存した10が、後から代入した20に置き換わっています。このように、値を変更できることが「変数」と呼ばれる理由です。
1-2. 変数名・データ型・値の3要素
C#の変数は、主に次の3つの要素で構成されます。
データ型
変数名
値
次のコードを例に確認してみましょう。
C#int age = 20;
それぞれの要素は次のようになります。
int:データ型age:変数名20:変数に保存する値
データ型は、変数にどのような種類のデータを保存するかを指定します。C#でよく使用されるデータ型には、次のようなものがあります。
| データ型 | 保存するデータ | 使用例 |
|---|---|---|
int | 整数 | int count = 10; |
double | 小数 | double price = 198.5; |
decimal | 高精度な小数 | decimal amount = 1200.50m; |
char | 1文字 | char grade = 'A'; |
string | 文字列 | string name = "佐藤"; |
bool | 真偽値 | bool isActive = true; |
C#は、変数のデータ型を厳密に扱う言語です。そのため、基本的にはデータ型に対応した値を代入する必要があります。
C#int age = 20;
string name = "鈴木";
bool isStudent = true;
一方、整数型の変数に文字列を代入することはできません。
C#int age = "20";
このコードは、int型の変数にstring型の値を代入しようとしているため、コンパイルエラーになります。
変数名を付けるときの基本ルール
C#の変数名には、次のようなルールがあります。
数字から始めることはできない
空白は使用できない
一部の記号は使用できない
C#の予約語は原則として使用できない
大文字と小文字は区別される
次の変数名は正しく使用できます。
C#int age = 20;
int userAge = 25;
int score1 = 100;
一方、次のような変数名は使用できません。
C#int 1score = 100;
int user age = 20;
また、C#ではローカル変数の名前にキャメルケースを使用するのが一般的です。キャメルケースでは、最初の単語を小文字で始め、2つ目以降の単語の先頭を大文字にします。
C#string userName = "高橋";
int totalPrice = 3000;
bool isLoggedIn = true;
aやxのような短すぎる名前よりも、保存するデータの意味がわかる名前を付けると、コードが読みやすくなります。
C#int a = 3000;
上記よりも、次のように記述したほうが変数の目的を理解しやすくなります。
C#int totalPrice = 3000;
1-3. 変数を使うメリット
C#で変数を使う主なメリットは、データを再利用できることです。
たとえば、同じ商品価格を複数の計算で使用する場合、数値を直接何度も記述するよりも、変数に保存したほうが効率的です。
C#int price = 1000;
Console.WriteLine(price);
Console.WriteLine(price * 2);
Console.WriteLine(price * 3);
変数を使うことで、元の値を変更する必要が生じた場合も、代入している箇所だけを修正すれば済みます。
C#int price = 1200;
変数を使用せず、すべての場所に数値を直接記述していると、変更時に複数の箇所を修正しなければなりません。修正漏れが発生すると、プログラムが意図しない動作をする原因になります。
変数には、ほかにも次のようなメリットがあります。
データにわかりやすい名前を付けられる
同じ値を繰り返し利用できる
計算結果を保存できる
入力された値を後の処理で使用できる
コードの変更や管理がしやすくなる
たとえば、商品の小計を計算して変数に保存できます。
C#int price = 500;
int quantity = 3;
int subtotal = price * quantity;
Console.WriteLine(subtotal);
実行結果は次のとおりです。
1500
priceは単価、quantityは数量、subtotalは小計を表しているため、計算内容を簡単に理解できます。
変数を使うと処理の流れがわかりやすくなる
計算を一度に記述すると、処理内容がわかりにくくなることがあります。
C#Console.WriteLine(1000 * 3 * 1.1);
変数を使って処理を分けると、それぞれの値が何を意味しているのかが明確になります。
C#int price = 1000;
int quantity = 3;
double taxRate = 0.1;
int subtotal = price * quantity;
double totalPrice = subtotal * (1 + taxRate);
Console.WriteLine(totalPrice);
変数名を適切に付けることで、コメントがなくてもコードの目的を判断しやすくなります。
1-4. 変数とリテラルの違い
変数と混同しやすい用語に「リテラル」があります。
リテラルとは、ソースコードに直接記述された値のことです。
C#int age = 20;
string name = "山田";
bool isMember = true;
このコードでは、次の部分がリテラルです。
20:整数リテラル"山田":文字列リテラルtrue:真偽値リテラル
一方、age、name、isMemberは変数です。
つまり、リテラルは実際の値そのものを表し、変数はその値を保存して参照するための名前付きの領域を表します。
C#int score = 100;
この場合、scoreが変数、100がリテラルです。
C#では、リテラルの書き方によってデータ型が異なります。
C#int count = 10;
double height = 170.5;
decimal price = 980.50m;
char rank = 'A';
string message = "こんにちは";
bool isComplete = false;
文字列はダブルクォーテーション、1文字を表すchar型はシングルクォーテーションで囲む点に注意しましょう。
C#string text = "A";
char character = 'A';
どちらも見た目は似ていますが、textは文字列、characterは1文字を表します。
また、decimal型のリテラルには、一般的に末尾へmまたはMを付けます。
C#decimal price = 1500.75m;
2. C#で変数を宣言する基本構文
C#で変数を使用するには、最初に変数を宣言する必要があります。
変数の宣言とは、使用するデータ型と変数名を指定し、プログラムに変数の存在を知らせることです。
基本構文は次のとおりです。
C#データ型 変数名;
たとえば、整数を保存するageという変数は、次のように宣言します。
C#int age;
この時点では、変数を用意しただけであり、値は代入していません。
2-1. データ型を指定して変数を宣言する方法
C#では、変数名の前にデータ型を記述して変数を宣言します。
C#int age;
string name;
double height;
bool isActive;
各変数には、宣言時に指定したデータ型に対応する値を保存できます。
C#int age;
age = 20;
string name;
name = "伊藤";
double height;
height = 168.5;
bool isActive;
isActive = true;
同じデータ型の変数は、1つの文で複数宣言することもできます。
C#int x, y, z;
さらに、それぞれの変数へ値を代入できます。
C#int x, y, z;
x = 10;
y = 20;
z = 30;
ただし、変数の役割が異なる場合は、1行ずつ宣言したほうが読みやすくなります。
C#int price;
int quantity;
int totalPrice;
varを使った変数宣言
C#では、varを使用すると、代入する値からデータ型を自動的に推論できます。
C#var age = 20;
var name = "佐々木";
var height = 172.5;
コンパイラは、代入された値から次のようにデータ型を判断します。
ageはint型nameはstring型heightはdouble型
varはデータ型を省略しているように見えますが、型がなくなるわけではありません。コンパイル時に具体的なデータ型が決定され、その後は別の型の値を代入できません。
C#var age = 20;
age = 30;
同じint型の値であるため、上記の代入は可能です。
一方、次のコードはエラーになります。
C#var age = 20;
age = "30";
ageは最初の代入によってint型と判断されているため、後から文字列を代入することはできません。
また、varを使用する場合は、宣言と同時に値を代入する必要があります。
C#var age;
この書き方では型を推論できないため、コンパイルエラーになります。
初心者のうちは、データ型を意識するためにintやstringなどを明示的に記述し、基本を理解してからvarを使い分けるとよいでしょう。
2-2. 変数の宣言と代入を同時に行う方法
C#では、変数の宣言と値の代入を1つの文で同時に行えます。この処理は「初期化」と呼ばれます。
基本構文は次のとおりです。
C#データ型 変数名 = 値;
たとえば、整数型の変数を宣言し、同時に20を代入する場合は次のように記述します。
C#int age = 20;
ほかのデータ型でも同じように初期化できます。
C#string name = "中村";
double temperature = 26.5;
bool isOpen = true;
char grade = 'B';
宣言と代入を同時に行うことで、変数に何が保存されているかを確認しやすくなります。
複数の同じ型の変数を、1行で初期化することも可能です。
C#int x = 10, y = 20, z = 30;
ただし、変数の数が多くなると読みにくくなるため、基本的には1行に1つずつ記述する方法がおすすめです。
C#int x = 10;
int y = 20;
int z = 30;
変数を使って別の変数を初期化する
すでに宣言されている変数の値を使って、別の変数を初期化することもできます。
C#int price = 1000;
int quantity = 2;
int totalPrice = price * quantity;
totalPriceには、priceとquantityを掛けた結果である2000が保存されます。
C#Console.WriteLine(totalPrice);
実行結果は次のとおりです。
2000
初期値を設定する重要性
ローカル変数は、値を代入する前に参照できません。
C#int age;
Console.WriteLine(age);
このコードでは、ageに値が代入されていないため、コンパイルエラーになります。
次のように、使用前に値を代入する必要があります。
C#int age;
age = 20;
Console.WriteLine(age);
または、宣言と同時に初期化します。
C#int age = 20;
Console.WriteLine(age);
変数を宣言するときに初期値が決まっている場合は、宣言と代入を同時に行うと、代入忘れを防ぎやすくなります。
2-3. 宣言後の変数に値を代入する方法
宣言済みの変数へ値を保存するには、代入演算子の=を使用します。
C#int score;
score = 50;
=の右側にある値が、左側の変数へ代入されます。
数学では=が左右の値が等しいことを表しますが、C#では「右側の値を左側へ代入する」という意味で使われます。
C#int score = 50;
score = 80;
このコードでは、最初に50を代入し、その後で80を代入しています。新しい値を代入すると、以前の値は上書きされます。
C#Console.WriteLine(score);
実行結果は次のとおりです。
80
現在の値を使って更新する
変数の現在の値を使って、新しい値を計算することもできます。
C#int score = 50;
score = score + 10;
Console.WriteLine(score);
実行結果は次のとおりです。
60
右側のscore + 10が先に計算され、その結果が左側のscoreへ代入されます。
このような処理は、複合代入演算子を使って短く記述できます。
C#int score = 50;
score += 10;
score += 10;は、score = score + 10;と同じ意味です。
C#には、次のような複合代入演算子があります。
| 演算子 | 記述例 | 同じ意味の処理 |
|---|---|---|
+= | x += 5; | x = x + 5; |
-= | x -= 5; | x = x - 5; |
*= | x *= 5; | x = x * 5; |
/= | x /= 5; | x = x / 5; |
%= | x %= 5; | x = x % 5; |
使用例は次のとおりです。
C#int number = 10;
number += 5;
Console.WriteLine(number);
number -= 3;
Console.WriteLine(number);
number *= 2;
Console.WriteLine(number);
実行結果は次のようになります。
15
12
24
1ずつ増減させる方法
整数を1ずつ増やす場合は、インクリメント演算子の++を使用できます。
C#int count = 0;
count++;
Console.WriteLine(count);
実行結果は1です。
反対に、1ずつ減らす場合はデクリメント演算子の--を使用します。
C#int count = 10;
count--;
Console.WriteLine(count);
実行結果は9です。
異なる型の値を代入するときの注意点
変数には、基本的に宣言時に指定したデータ型と同じ型の値を代入します。
C#int age = 20;
age = 25;
一部のデータ型では、自動的な型変換が行われます。たとえば、int型の値はdouble型の変数へ代入できます。
C#int number = 10;
double value = number;
int型よりもdouble型のほうが広い範囲の数値を扱えるため、この変換は自動的に行われます。
一方、double型の値をint型へそのまま代入することはできません。
C#double value = 10.5;
int number = value;
小数部分が失われる可能性があるため、明示的な型変換が必要です。
C#double value = 10.5;
int number = (int)value;
Console.WriteLine(number);
実行結果は次のとおりです。
10
この変換では小数部分が切り捨てられます。変数へ異なる型の値を代入するときは、データが失われないか確認することが重要です。
まとめ
C#のVariables(変数)は、プログラムで扱うデータを一時的に保存するための名前付きの領域です。変数は、データ型、変数名、値という3つの要素を中心に構成されます。
変数を宣言する基本構文は次のとおりです。
C#データ型 変数名;
宣言と代入を同時に行う場合は、次のように記述します。
C#データ型 変数名 = 値;
宣言後の変数へ値を代入する場合は、代入演算子の=を使用します。
C#int score;
score = 100;
変数へ新しい値を代入すると、以前の値は上書きされます。また、+=などの複合代入演算子や、++などの演算子を使うことで、変数の値を簡潔に更新できます。
C#では、変数ごとにデータ型が決められているため、保存する値と型の組み合わせにも注意が必要です。まずはint、double、string、boolなどの基本的なデータ型を使い、変数の宣言、初期化、再代入を実際に試しながら理解を深めていきましょう。

