C#の変数とは?宣言・型・代入・スコープを初心者向けに完全解説
はじめに
C#でプログラムを書くとき、最初に理解しておきたい基本のひとつが「変数」です。
変数は、数値や文字列などのデータを一時的に保存しておくための仕組みです。たとえば、ユーザーの名前、商品の価格、計算結果、true/falseの判定結果など、プログラムの中で扱うさまざまな値を変数に入れて使います。
C#は型を重視する言語なので、変数を使うときには「どの種類の値を入れるのか」を意識する必要があります。整数ならint、文字列ならstring、真偽値ならboolのように、値の種類に合わせて型を指定します。
この記事では、C#の変数について、宣言、型、代入、再代入、スコープ、命名規則、よくあるエラーまで初心者向けにわかりやすく解説します。
1. C#の変数とは?初心者向けにわかりやすく解説
C#の変数とは、プログラムの中で値を保存しておくための名前付きの領域です。
たとえば、次のように書くと、ageという変数に20という値を入れることができます。
C#int age = 20;
この場合、ageは変数名、intは型、20は変数に入っている値です。
変数を使うことで、値に意味のある名前を付けられるため、プログラムが読みやすくなります。
1-1. 変数は「値を入れておく箱」のようなもの
変数はよく「値を入れておく箱」にたとえられます。
たとえば、次のコードを見てください。
C#string userName = "田中";
これは、userNameという箱の中に"田中"という文字列を入れているイメージです。
さらに、次のように書けば、その箱の中身を取り出して画面に表示できます。
C#Console.WriteLine(userName);
実行結果は次のようになります。
田中
このように、変数は値を保存し、必要なときに取り出して使うための仕組みです。
1-2. C#で変数を使う目的
C#で変数を使う主な目的は、値を再利用しやすくすることです。
たとえば、商品の価格を何度も使いたい場合、毎回1000と直接書くよりも、変数に入れて使ったほうが便利です。
C#int price = 1000;
Console.WriteLine(price);
Console.WriteLine(price * 2);
Console.WriteLine(price + 500);
このようにしておけば、価格を変更したくなったときも、変数の値を1か所変えるだけで済みます。
C#int price = 1200;
プログラムの中に同じ値を何度も直接書くと、修正漏れが起きやすくなります。変数を使うことで、修正しやすく、管理しやすいコードになります。
1-3. 変数を使うとプログラムが読みやすくなる理由
変数を使うと、値の意味がわかりやすくなります。
たとえば、次のコードを見てください。
C#Console.WriteLine(1500 * 3);
このコードだけを見ると、1500や3が何を表しているのかわかりにくいです。
一方、変数を使うと次のように書けます。
C#int price = 1500;
int quantity = 3;
Console.WriteLine(price * quantity);
このコードなら、priceが価格、quantityが数量を表していることがすぐにわかります。
変数名を適切に付けることで、コードそのものが説明文のようになり、後から読んだときにも理解しやすくなります。
2. C#の変数宣言の基本
C#で変数を使うには、まず変数を宣言します。
変数宣言とは、「この名前の変数を使います」とプログラムに伝えることです。C#では、基本的に変数を使う前に型と変数名を指定して宣言します。
2-1. 変数宣言の基本構文
C#の変数宣言の基本構文は次のとおりです。
C#型 変数名;
たとえば、整数を入れる変数を宣言する場合は次のように書きます。
C#int age;
この時点では、ageという変数を使う準備ができただけです。値を入れるには、代入を行います。
C#age = 20;
宣言と代入を分けて書くと、次のようになります。
C#int age;
age = 20;
2-2. データ型・変数名・値の関係
C#の変数は、主に次の3つの要素で構成されます。
C#int score = 80;
このコードでは、intがデータ型、scoreが変数名、80が値です。
データ型は、変数に入れられる値の種類を決めます。int型の変数には整数を入れることができますが、文字列をそのまま入れることはできません。
C#int score = 80; // OK
string name = "佐藤"; // OK
一方、次のようなコードはエラーになります。
C#int score = "80"; // エラー
"80"は見た目は数字ですが、ダブルクォーテーションで囲まれているため文字列です。int型の変数には文字列をそのまま代入できません。
2-3. 宣言と同時に初期化する書き方
変数は、宣言と同時に値を入れることができます。これを初期化といいます。
C#int age = 20;
string name = "田中";
bool isActive = true;
初心者のうちは、できるだけ宣言と同時に初期化する書き方をおすすめします。
理由は、変数に値が入っていない状態で使ってしまうミスを防ぎやすいからです。
C#int count = 0;
Console.WriteLine(count);
このように、最初の値を明確にしておくと、プログラムの動きも理解しやすくなります。
2-4. 複数の変数を宣言する方法
同じ型の変数であれば、1行で複数宣言することもできます。
C#int x, y, z;
値を同時に代入することもできます。
C#int x = 10, y = 20, z = 30;
ただし、初心者のうちは次のように1行ずつ書いたほうが読みやすいです。
C#int x = 10;
int y = 20;
int z = 30;
1行にまとめると短く書けますが、変数が増えると読みづらくなることがあります。特に学習中は、わかりやすさを優先しましょう。
3. C#でよく使う変数の型
C#にはさまざまな型がありますが、初心者が最初に覚えるべき型はそれほど多くありません。
まずは、int、double、decimal、string、bool、charを理解しておくと、多くの基本的なプログラムを書けるようになります。
3-1. int型:整数を扱う
int型は、整数を扱うための型です。
C#int age = 25;
int count = 10;
int score = 100;
小数点を含まない数値を扱うときに使います。
C#int result = 10 + 5;
Console.WriteLine(result);
実行結果は次のとおりです。
15
年齢、個数、回数、点数など、整数で表せる値にはint型を使うことが多いです。
3-2. double型・decimal型:小数を扱う
小数を扱う場合は、double型やdecimal型を使います。
double型は、一般的な小数計算に使われます。
C#double height = 170.5;
double temperature = 36.6;
一方、decimal型は金額など、誤差をできるだけ避けたい計算でよく使われます。
C#decimal price = 1200.50m;
decimal型の値を書くときは、数値の末尾にmを付けます。
C#decimal taxRate = 0.10m;
decimal price = 1000m;
decimal tax = price * taxRate;
Console.WriteLine(tax);
金額計算ではdoubleよりもdecimalを使う場面が多い、と覚えておくとよいでしょう。
3-3. string型:文字列を扱う
string型は、文字列を扱うための型です。
C#string name = "山田";
string message = "こんにちは";
文字列はダブルクォーテーションで囲みます。
C#string greeting = "おはようございます";
Console.WriteLine(greeting);
文字列同士をつなげることもできます。
C#string firstName = "太郎";
string lastName = "山田";
string fullName = lastName + firstName;
Console.WriteLine(fullName);
実行結果は次のようになります。
山田太郎
C#では、文字列の中に変数の値を埋め込む文字列補間もよく使います。
C#string name = "佐藤";
int age = 30;
Console.WriteLine($"{name}さんは{age}歳です。");
実行結果は次のとおりです。
佐藤さんは30歳です。
3-4. bool型:true/falseを扱う
bool型は、trueまたはfalseのどちらかを扱う型です。
C#bool isLogin = true;
bool hasError = false;
条件分岐でよく使われます。
C#bool isMember = true;
if (isMember)
{
Console.WriteLine("会員です。");
}
else
{
Console.WriteLine("会員ではありません。");
}
bool型の変数名には、is、has、canなどを付けることが多いです。
C#bool isActive = true;
bool hasPermission = false;
bool canEdit = true;
このように書くと、変数が真偽値であることがわかりやすくなります。
3-5. char型:1文字を扱う
char型は、1文字を扱うための型です。
C#char grade = 'A';
char symbol = '#';
char型では、文字をシングルクォーテーションで囲みます。
C#char initial = 'T';
string型との違いに注意しましょう。
C#char letter = 'A'; // 1文字
string text = "A"; // 文字列
charは1文字だけ、stringは複数の文字を扱える型です。
次のように、charに複数文字を入れることはできません。
C#char word = 'AB'; // エラー
複数の文字を扱いたい場合はstringを使います。
3-6. 値型と参照型の違い
C#の型は、大きく分けると「値型」と「参照型」に分類できます。
int、double、decimal、bool、charなどは値型です。値型の変数には、値そのものが入っているイメージです。
C#int a = 10;
int b = a;
b = 20;
Console.WriteLine(a);
Console.WriteLine(b);
実行結果は次のようになります。
10
20
b = a;と書いても、aとbは別々の値として扱われます。そのため、bを変更してもaは変わりません。
一方、stringや配列、クラスなどは参照型です。参照型の変数には、データそのものではなく、データがある場所を指す情報が入っているイメージです。
ただし、stringは参照型ですが、値を書き換えるたびに新しい文字列が作られるため、初心者のうちは特別な文字列型として理解しておくとよいでしょう。
4. C#の変数への代入と再代入
変数は、宣言したあとに値を入れたり、別の値に変更したりできます。
この「変数に値を入れること」を代入といいます。
4-1. 代入とは何か
代入とは、変数に値を入れる処理のことです。
C#では、代入に=を使います。
C#int age;
age = 20;
このコードは、「ageに20を代入する」という意味です。
数学では=は「等しい」という意味ですが、プログラミングでは「右側の値を左側の変数に入れる」という意味で使われます。
C#int x = 10;
これは、「xと10が等しい」というよりも、「xに10を入れる」と考えると理解しやすいです。
4-2. 変数に値を代入する基本例
変数に値を代入する基本例を見てみましょう。
C#int number;
number = 100;
Console.WriteLine(number);
実行結果は次のようになります。
100
文字列を代入する場合は次のように書きます。
C#string name;
name = "鈴木";
Console.WriteLine(name);
実行結果は次のとおりです。
鈴木
変数の型に合った値を代入することが大切です。
4-3. 変数の値をあとから変更する方法
変数は、あとから別の値を代入して変更できます。これを再代入といいます。
C#int score = 70;
Console.WriteLine(score);
score = 90;
Console.WriteLine(score);
実行結果は次のようになります。
70
90
最初は70だったscoreの値が、あとから90に変更されています。
文字列でも同じように再代入できます。
C#string status = "未処理";
Console.WriteLine(status);
status = "処理済み";
Console.WriteLine(status);
変数は「変わる数」と書くように、プログラムの途中で値を変えられるのが特徴です。
4-4. 型が違う値を代入できない理由
C#では、変数の型と代入する値の型が一致していないとエラーになります。
C#int age = "20"; // エラー
ageはint型なので、整数を入れる必要があります。しかし、"20"は文字列です。
正しくは次のように書きます。
C#int age = 20;
文字列として扱いたい場合は、変数の型をstringにします。
C#string ageText = "20";
C#が型に厳しい理由は、プログラムのミスを早い段階で見つけやすくするためです。
たとえば、数値だと思って計算しようとした値が実は文字列だった場合、思わぬエラーにつながります。C#では型を明確にすることで、安全でわかりやすいコードを書けます。
4-5. キャストと型変換の基本
型が違う値を扱いたい場合は、型変換を行います。
たとえば、int型の値をdouble型に代入する場合は、自動的に変換されます。
C#int number = 10;
double result = number;
Console.WriteLine(result);
この場合、10は10.0のような小数として扱われます。
一方、double型をint型に変換する場合は、小数部分が失われる可能性があるため、明示的なキャストが必要です。
C#double value = 10.5;
int number = (int)value;
Console.WriteLine(number);
実行結果は次のようになります。
10
小数部分の.5は切り捨てられます。
文字列を数値に変換したい場合は、int.Parseなどを使います。
C#string text = "123";
int number = int.Parse(text);
Console.WriteLine(number + 10);
実行結果は次のとおりです。
133
ただし、"abc"のように数値に変換できない文字列をint.Parseするとエラーになります。実際の開発では、int.TryParseを使うと安全です。
C#string text = "123";
if (int.TryParse(text, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("数値に変換できません。");
}
5. varを使った変数宣言
C#では、型を明示的に書く代わりにvarを使って変数を宣言できます。
C#var name = "田中";
var age = 20;
varを使うと、右側の値からコンパイラが型を判断してくれます。
5-1. varとは何か
varは、変数の型をコンパイラに推論させるためのキーワードです。
C#var score = 100;
この場合、100は整数なので、scoreはint型として扱われます。
つまり、次のコードと同じ意味になります。
C#int score = 100;
varを使っても、型がなくなるわけではありません。C#は型のある言語なので、varで宣言した変数にも必ず型があります。
5-2. varで型推論される仕組み
varは、代入された値をもとに型を決定します。
C#var age = 20; // int型
var price = 1200.5; // double型
var name = "山田"; // string型
var isActive = true; // bool型
一度型が決まると、別の型の値を代入することはできません。
C#var age = 20;
age = "二十歳"; // エラー
ageは最初の値20によってint型と判断されているため、あとから文字列を代入することはできません。
5-3. varを使えるケース・使えないケース
varは、宣言と同時に初期化する場合に使えます。
C#var count = 10;
var message = "こんにちは";
一方、次のように初期値を指定しない書き方はできません。
C#var count; // エラー
なぜなら、右側の値がないため、コンパイラが型を判断できないからです。
また、nullだけを代入することもできません。
C#var name = null; // エラー
nullだけでは、何の型として扱えばよいか判断できないためです。
型を明確にしたい場合は、次のように書きます。
C#string name = null;
5-4. 初心者がvarを使うときの注意点
varは便利ですが、初心者のうちは使いすぎに注意しましょう。
たとえば、次のコードは型がすぐにわかります。
C#var age = 20;
var name = "佐藤";
しかし、次のようなコードでは、右側の処理を見ただけでは型がわかりにくい場合があります。
C#var result = GetData();
GetData()が何を返すのか知らないと、resultの型がわかりません。
初心者のうちは、基本的な型を覚えるためにも、まずは次のように明示的に型を書く練習をするとよいでしょう。
C#int age = 20;
string name = "佐藤";
bool isActive = true;
varは、型が明らかな場面や、長い型名を簡潔に書きたい場面で使うのがおすすめです。
6. C#の変数名の付け方と命名規則
変数名は、プログラムの読みやすさに大きく影響します。
同じ値を扱う場合でも、変数名がわかりやすいかどうかで、コードの理解しやすさは大きく変わります。
6-1. 変数名に使える文字と使えない文字
C#の変数名には、英字、数字、アンダースコアなどを使えます。
C#int age;
string userName;
int item_count;
ただし、変数名の先頭に数字を使うことはできません。
C#int 1stNumber; // エラー
次のように、数字を使う場合は先頭以外にします。
C#int number1;
int score2;
また、記号の多くは変数名に使えません。
C#int user-name; // エラー
int total.price; // エラー
ハイフンやドットは別の意味を持つため、変数名には使えません。
6-2. C#でよく使われるcamelCase
C#のローカル変数では、一般的にcamelCaseがよく使われます。
camelCaseとは、最初の単語を小文字で始め、2つ目以降の単語の先頭を大文字にする書き方です。
C#int userAge;
string userName;
decimal totalPrice;
bool isActive;
たとえば、ユーザーの年齢を表す変数なら、userAgeのように書きます。
C#int userAge = 25;
C#では、クラス名やメソッド名にはPascalCase、ローカル変数にはcamelCaseが使われることが多いです。
C#string userName = "田中";
int totalCount = 5;
このような慣習に合わせると、他の人が読んでも自然なC#コードになります。
6-3. わかりやすい変数名を付けるコツ
変数名は、何を表しているのかがわかる名前にしましょう。
悪い例は次のような名前です。
C#int a = 1000;
int b = 3;
このコードだけでは、aやbが何を意味しているのかわかりません。
良い例は次のような名前です。
C#int price = 1000;
int quantity = 3;
これなら、価格と数量を表していることがすぐにわかります。
変数名を付けるときは、次のような点を意識するとよいです。
C#int age = 20;
string userName = "山田";
decimal totalPrice = 3500m;
bool isLoggedIn = true;
短すぎる名前よりも、意味が伝わる名前を優先しましょう。
6-4. 予約語を変数名にできない理由
C#には、特別な意味を持つ予約語があります。
たとえば、int、string、class、if、for、returnなどです。
これらはC#の文法で使われるキーワードなので、通常は変数名として使えません。
C#int class = 10; // エラー
string if = "test"; // エラー
予約語を変数名にできてしまうと、コンパイラが文法としての意味なのか、変数名なのか判断しにくくなります。
そのため、予約語は変数名として使わないようにしましょう。
どうしても使いたい場合は@を付ける方法もあります。
C#int @class = 10;
ただし、読みやすいコードとは言いにくいため、初心者のうちは避けるのがおすすめです。
6-5. 悪い変数名と良い変数名の例
変数名の良し悪しを具体例で見てみましょう。
悪い例です。
C#int x = 1200;
int y = 2;
int z = x * y;
短く書けていますが、何の計算をしているのかわかりません。
良い例です。
C#int price = 1200;
int quantity = 2;
int totalPrice = price * quantity;
このように書くと、商品の価格、数量、合計金額を計算していることがわかります。
真偽値の場合も同じです。
悪い例です。
C#bool flag = true;
flagだけでは、何の状態を表しているのかわかりにくいです。
良い例です。
C#bool isLoggedIn = true;
bool hasError = false;
bool canSave = true;
変数名を見ただけで意味がわかるようにすることが、読みやすいC#コードを書くコツです。
7. C#の変数のスコープ
変数には、使える範囲があります。この範囲のことをスコープといいます。
スコープを理解していないと、「宣言したはずの変数が使えない」というエラーに悩まされることがあります。
7-1. スコープとは変数を使える範囲のこと
スコープとは、変数が有効な範囲のことです。
たとえば、メソッドの中で宣言した変数は、基本的にそのメソッドの中でしか使えません。
C#void ShowMessage()
{
string message = "こんにちは";
Console.WriteLine(message);
}
このmessageは、ShowMessageメソッドの中で宣言されているため、その中で使えます。
しかし、メソッドの外からは使えません。
C#void ShowMessage()
{
string message = "こんにちは";
}
Console.WriteLine(message); // エラー
変数は、宣言された場所によって使える範囲が決まります。
7-2. ローカル変数のスコープ
メソッドの中で宣言した変数をローカル変数といいます。
C#void Calculate()
{
int price = 1000;
int quantity = 3;
int total = price * quantity;
Console.WriteLine(total);
}
この例では、price、quantity、totalがローカル変数です。
これらの変数は、Calculateメソッドの中でだけ使えます。
C#void Calculate()
{
int total = 3000;
}
Console.WriteLine(total); // エラー
ローカル変数は、必要な場所で宣言し、その範囲内で使うのが基本です。
7-3. ブロック内で宣言した変数の有効範囲
C#では、{ }で囲まれた範囲をブロックと呼びます。
ブロックの中で宣言した変数は、そのブロックの中でだけ使えます。
C#{
int number = 10;
Console.WriteLine(number);
}
Console.WriteLine(number); // エラー
numberはブロックの中で宣言されているため、ブロックの外では使えません。
この仕組みにより、変数が不要な範囲まで残らないようになっています。
スコープを狭くすることで、変数の使い道が明確になり、ミスも減らせます。
7-4. if文・for文の中で宣言した変数のスコープ
if文の中で宣言した変数は、そのifブロックの中でだけ使えます。
C#bool isMember = true;
if (isMember)
{
int discount = 500;
Console.WriteLine(discount);
}
Console.WriteLine(discount); // エラー
discountはif文の中で宣言されているため、外では使えません。
for文でも同じです。
C#for (int i = 0; i < 3; i++)
{
Console.WriteLine(i);
}
Console.WriteLine(i); // エラー
iはfor文の中で使うために宣言されている変数なので、for文の外では使えません。
もし外でも使いたい場合は、外側で宣言します。
C#int i;
for (i = 0; i < 3; i++)
{
Console.WriteLine(i);
}
Console.WriteLine(i);
ただし、必要以上にスコープを広げるとコードがわかりにくくなるため、基本的には使う範囲を狭くするのがおすすめです。
7-5. スコープ外の変数を使うとエラーになる理由
スコープ外の変数を使うと、C#はその変数を見つけられません。
C#if (true)
{
string message = "こんにちは";
}
Console.WriteLine(message); // エラー
この場合、messageはifブロックの中だけで有効です。ブロックの外では存在しないものとして扱われます。
スコープ外の変数を使えない仕組みは、プログラムの安全性を高めるために重要です。
もしどこからでもすべての変数を使えてしまうと、意図しない場所で値が変更され、バグの原因になります。
変数は、必要な範囲で宣言し、必要な範囲だけで使うことを意識しましょう。
8. フィールド・ローカル変数・定数の違い
C#では、変数に似たものとして、フィールドや定数があります。
それぞれ使う場所や役割が異なるため、違いを理解しておきましょう。
8-1. ローカル変数とは
ローカル変数とは、メソッドやブロックの中で宣言される変数です。
C#void ShowTotal()
{
int price = 1000;
int quantity = 2;
int total = price * quantity;
Console.WriteLine(total);
}
この例のprice、quantity、totalはローカル変数です。
ローカル変数は、そのメソッドやブロックの中だけで使います。処理の一時的な値を保存するのに向いています。
8-2. フィールドとは
フィールドとは、クラスの中に直接宣言する変数のことです。
C#class User
{
string name;
int age;
void ShowProfile()
{
Console.WriteLine($"{name}さんは{age}歳です。");
}
}
この例では、nameとageがフィールドです。
フィールドは、クラスの中にある複数のメソッドから使うことができます。
C#class Counter
{
int count = 0;
public void Add()
{
count++;
}
public void Show()
{
Console.WriteLine(count);
}
}
countはフィールドなので、AddメソッドでもShowメソッドでも使えます。
ローカル変数が一時的な値を扱うのに対して、フィールドはオブジェクトの状態を保持するために使われます。
8-3. constで定数を宣言する方法
定数とは、一度決めたら変更できない値のことです。
C#では、constを使って定数を宣言できます。
C#const double Pi = 3.14;
定数はあとから値を変更できません。
C#const int MaxCount = 100;
MaxCount = 200; // エラー
消費税率、最大値、固定メッセージなど、プログラムの実行中に変わらない値には定数を使うとよいでしょう。
C#const decimal TaxRate = 0.10m;
decimal price = 1000m;
decimal tax = price * TaxRate;
Console.WriteLine(tax);
定数にしておくと、「この値は変更しない」という意図が明確になります。
8-4. readonlyとの違い
readonlyも、値の変更を制限するために使われます。
constとの大きな違いは、値を決めるタイミングです。
constはコンパイル時に値が決まる定数です。
C#const int MaxCount = 100;
一方、readonlyは実行時に値を設定できます。ただし、基本的には宣言時またはコンストラクター内でしか代入できません。
C#class User
{
readonly string createdAt;
public User(string date)
{
createdAt = date;
}
}
constは本当に固定された値に使い、readonlyはオブジェクト作成時に決まり、その後変えたくない値に使います。
たとえば、円周率のように常に同じ値はconst、ユーザー作成日時のようにインスタンスごとに異なるが後から変更したくない値はreadonlyが向いています。
8-5. 変数と定数の使い分け
変数と定数は、値を変更するかどうかで使い分けます。
値が変わる場合は変数を使います。
C#int count = 0;
count++;
値が変わらない場合は定数を使います。
C#const int MaxRetryCount = 3;
変数にすべき値を定数にすると、あとから変更できなくなります。逆に、定数にすべき値を変数にすると、誤って変更してしまう可能性があります。
基本的には、変更する必要がない値はconstやreadonlyにして、変更される値だけを変数にするのがおすすめです。
9. C#の変数で初心者がよくつまずくエラー
C#の変数を学習していると、いくつかよくあるエラーに出会います。
エラーは最初は難しく感じるかもしれませんが、原因を理解すれば落ち着いて対処できます。
9-1. 変数を宣言していないエラー
変数を宣言せずに使うとエラーになります。
C#age = 20; // エラー
C#では、変数を使う前に宣言する必要があります。
正しくは次のように書きます。
C#int age = 20;
または、宣言と代入を分けて書きます。
C#int age;
age = 20;
変数を使う前には、「型」と「変数名」を書いて宣言することを忘れないようにしましょう。
9-2. 初期化していない変数を使うエラー
ローカル変数は、値を入れる前に使うとエラーになります。
C#int count;
Console.WriteLine(count); // エラー
countは宣言されていますが、まだ値が代入されていません。
正しくは次のように初期化します。
C#int count = 0;
Console.WriteLine(count);
C#では、未初期化のローカル変数を使えないようになっています。これは、予測できない値を使ってしまうことを防ぐためです。
9-3. 型が一致しないエラー
変数の型と代入する値の型が違うとエラーになります。
C#int number = "100"; // エラー
"100"は文字列なので、int型にはそのまま代入できません。
数値として扱いたい場合は、次のように書きます。
C#int number = 100;
文字列から数値に変換したい場合は、int.Parseやint.TryParseを使います。
C#string text = "100";
int number = int.Parse(text);
型の違いを意識することは、C#の変数を理解するうえでとても重要です。
9-4. スコープ外の変数を参照するエラー
変数のスコープ外で参照するとエラーになります。
C#if (true)
{
int score = 80;
}
Console.WriteLine(score); // エラー
scoreはif文の中で宣言されているため、外側では使えません。
外側でも使いたい場合は、外側で宣言します。
C#int score = 0;
if (true)
{
score = 80;
}
Console.WriteLine(score);
ただし、変数のスコープは必要以上に広げないほうがよいです。どこで使う値なのかを考えて、適切な場所で宣言しましょう。
9-5. 同じ名前の変数を宣言してしまうエラー
同じスコープ内で同じ名前の変数を宣言するとエラーになります。
C#int age = 20;
int age = 30; // エラー
すでにageという変数が宣言されているため、同じ名前で再度宣言することはできません。
値を変更したい場合は、型を書かずに再代入します。
C#int age = 20;
age = 30;
宣言と再代入の違いを理解しましょう。
C#int age = 20; // 宣言と初期化
age = 30; // 再代入
同じ名前の変数を何度も宣言しないように注意してください。
10. C#の変数を使ったサンプルコード
ここでは、C#の変数を使った具体的なサンプルコードを紹介します。
実際にコードを書きながら確認すると、変数の使い方がより理解しやすくなります。
10-1. 数値を変数に入れて計算する例
まずは、数値を変数に入れて計算する例です。
C#int price = 1500;
int quantity = 3;
int totalPrice = price * quantity;
Console.WriteLine(totalPrice);
実行結果は次のようになります。
4500
priceに価格、quantityに数量を入れ、掛け算の結果をtotalPriceに代入しています。
消費税を計算する例も見てみましょう。
C#decimal price = 1000m;
decimal taxRate = 0.10m;
decimal tax = price * taxRate;
decimal total = price + tax;
Console.WriteLine(total);
実行結果は次のとおりです。
1100.00
金額計算ではdecimal型を使うとよいです。
10-2. 文字列を変数に入れて表示する例
次は、文字列を変数に入れて表示する例です。
C#string name = "田中";
string message = "こんにちは";
Console.WriteLine(message + "、" + name + "さん");
実行結果は次のようになります。
こんにちは、田中さん
文字列補間を使うと、より読みやすく書けます。
C#string name = "田中";
string message = "こんにちは";
Console.WriteLine($"{message}、{name}さん");
変数の値を文章の中に埋め込みたいときは、文字列補間が便利です。
10-3. bool型の変数で条件分岐する例
bool型の変数は、条件分岐でよく使います。
C#bool isLoggedIn = true;
if (isLoggedIn)
{
Console.WriteLine("ログインしています。");
}
else
{
Console.WriteLine("ログインしていません。");
}
実行結果は次のとおりです。
ログインしています。
bool型は、状態を表すときに便利です。
C#bool hasError = false;
if (hasError)
{
Console.WriteLine("エラーが発生しました。");
}
else
{
Console.WriteLine("正常に処理されました。");
}
このように、trueかfalseかによって処理を分けられます。
10-4. for文で変数を使う例
for文では、繰り返し回数を管理するために変数を使います。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
実行結果は次のようになります。
0
1
2
3
4
iはカウンター変数と呼ばれることがあります。
合計値を計算する例も見てみましょう。
C#int total = 0;
for (int i = 1; i <= 5; i++)
{
total += i;
}
Console.WriteLine(total);
実行結果は次のとおりです。
15
total += i;は、total = total + i;と同じ意味です。
10-5. 複数の型を組み合わせた実践例
最後に、複数の型を組み合わせた実践例を見てみましょう。
C#string productName = "ノート";
int price = 200;
int quantity = 5;
decimal taxRate = 0.10m;
bool isMember = true;
int subtotal = price * quantity;
decimal tax = subtotal * taxRate;
decimal total = subtotal + tax;
if (isMember)
{
total -= 100m;
}
Console.WriteLine($"商品名: {productName}");
Console.WriteLine($"数量: {quantity}");
Console.WriteLine($"合計金額: {total}円");
このコードでは、文字列、整数、小数、真偽値を組み合わせています。
実行結果の例は次のようになります。
商品名: ノート
数量: 5
合計金額: 1000.00円
変数を使うことで、複雑な処理も意味のある単位に分けて書けます。
11. C#の変数を理解するための練習問題
C#の変数は、実際に手を動かして覚えるのが一番です。
ここでは、初心者向けの練習問題を紹介します。まずは自分で考えてから、解答例を確認してみましょう。
11-1. 変数を宣言して値を表示する問題
次の条件を満たすコードを書いてください。
名前を表すstring型の変数nameを宣言し、"山田"を代入してください。その後、Console.WriteLineで表示してください。
期待する実行結果は次のとおりです。
山田
11-2. 変数の値を変更する問題
次の条件を満たすコードを書いてください。
int型の変数scoreを宣言し、最初に70を代入してください。その後、scoreの値を90に変更して表示してください。
期待する実行結果は次のとおりです。
90
11-3. 型に合った値を代入する問題
次の変数に、型に合った値を代入してください。
C#int age = ;
string name = ;
bool isStudent = ;
char rank = ;
それぞれ、年齢、名前、学生かどうか、ランクを表す値を入れてみましょう。
11-4. スコープのエラーを修正する問題
次のコードはエラーになります。エラーの原因を考え、正しく修正してください。
C#if (true)
{
int number = 10;
}
Console.WriteLine(number);
numberを表示できるように修正してみましょう。
11-5. 練習問題の解答例
11-1の解答例です。
C#string name = "山田";
Console.WriteLine(name);
11-2の解答例です。
C#int score = 70;
score = 90;
Console.WriteLine(score);
11-3の解答例です。
C#int age = 20;
string name = "佐藤";
bool isStudent = true;
char rank = 'A';
11-4の解答例です。
C#int number = 0;
if (true)
{
number = 10;
}
Console.WriteLine(number);
numberをif文の外で宣言することで、Console.WriteLineから参照できるようになります。
また、次のようにConsole.WriteLineをif文の中に入れる方法もあります。
C#if (true)
{
int number = 10;
Console.WriteLine(number);
}
どちらがよいかは、変数をどの範囲で使いたいかによって決まります。
12. C#の変数に関するよくある質問
ここでは、C#の変数について初心者が疑問に感じやすいポイントをQ&A形式で解説します。
12-1. C#では変数の型を必ず書く必要がある?
基本的には、C#の変数には型があります。
明示的に型を書く場合は、次のように書きます。
C#int age = 20;
string name = "田中";
ただし、varを使えば型を省略して書くこともできます。
C#var age = 20;
var name = "田中";
この場合でも、型がなくなるわけではありません。ageはint型、nameはstring型としてコンパイラに判断されます。
つまり、C#では変数の型は必ず存在します。ただし、コード上で明示的に書く場合と、varで推論させる場合があります。
12-2. varと明示的な型指定はどちらを使うべき?
初心者のうちは、まず明示的に型を書くことをおすすめします。
C#int age = 20;
string name = "佐藤";
bool isActive = true;
型を自分で書くことで、どの値がどの型なのかを理解しやすくなるからです。
一方、型が明らかな場合はvarを使っても問題ありません。
C#var age = 20;
var name = "佐藤";
実務では、読みやすさを基準に使い分けることが多いです。型を書いたほうがわかりやすいなら明示的に書き、右側を見れば型が明らかな場合はvarを使う、という考え方がよいでしょう。
12-3. 変数とプロパティの違いは?
変数は、値を保存するための基本的な仕組みです。
C#int age = 20;
一方、プロパティは、クラスの外部から値を取得したり設定したりするための仕組みです。
C#class User
{
public string Name { get; set; }
}
プロパティは、クラスのデータを安全に扱うためによく使われます。
たとえば、次のように使います。
C#User user = new User();
user.Name = "田中";
Console.WriteLine(user.Name);
初心者のうちは、まず変数を理解し、そのあとクラスやプロパティを学ぶとスムーズです。
12-4. 変数名は日本語でも使える?
C#では、日本語の変数名も使えます。
C#int 年齢 = 20;
string 名前 = "山田";
Console.WriteLine(名前);
ただし、実際の開発では英語の変数名を使うことが一般的です。
C#int age = 20;
string name = "Yamada";
英語の変数名を使う理由は、開発現場では英語のコードに慣れている人が多く、ライブラリやドキュメントも英語ベースのものが多いからです。
学習中に理解しやすくするために日本語の変数名を使うのは問題ありませんが、慣れてきたら英語の変数名にも挑戦しましょう。
12-5. 初心者はまずどの型を覚えればいい?
初心者は、まず次の型を覚えるのがおすすめです。
C#int age = 20;
double height = 170.5;
decimal price = 1200.50m;
string name = "田中";
bool isActive = true;
char rank = 'A';
特によく使うのは、int、string、boolです。
intは数値、stringは文字列、boolは条件分岐でよく使います。
慣れてきたら、小数を扱うdoubleやdecimal、1文字を扱うchar、日付を扱うDateTimeなども学んでいくとよいでしょう。
最初からすべての型を覚える必要はありません。よく使う型から順番に理解していけば大丈夫です。
まとめ
C#の変数は、プログラムの中で値を保存し、再利用するための基本的な仕組みです。
変数を使うには、型と変数名を指定して宣言します。
C#int age = 20;
string name = "田中";
bool isActive = true;
C#では型が重要で、intには整数、stringには文字列、boolにはtrueまたはfalseを入れます。型が違う値を代入しようとするとエラーになるため、変数の型を意識することが大切です。
また、変数にはスコープがあります。宣言した場所によって使える範囲が決まり、スコープ外ではその変数を使えません。
C#if (true)
{
int number = 10;
}
Console.WriteLine(number); // エラー
変数を正しく使うためには、宣言、初期化、代入、再代入、型、スコープを理解する必要があります。
最初は難しく感じるかもしれませんが、int、string、boolなどの基本的な型から練習すれば、少しずつ慣れていきます。
C#の変数は、条件分岐、繰り返し、メソッド、クラスなど、あらゆる学習内容の土台になります。まずは簡単なサンプルコードを書きながら、変数の使い方をしっかり身につけましょう。

