Day 3 のゴールと全体イメージ
Day 3 では、C# の「データ型」をじっくり学びます。 Day 2 で「変数」という箱を学びましたが、その箱に「どんな種類の値を入れるか」を決めるのがデータ型です。
学ぶ項目は次のとおりです。
intlongdoubledecimalstringcharbool- 値型
- 参照型の概要
これらを、初心者向けにかみ砕きながら、例題とコードを交えて説明していきます。
数値型:int と long
int:よく使う「整数」の型
int は、もっともよく使われる整数型です。 小さめ〜中くらいの範囲の整数を扱うときに使います。
class Program
{
static void Main(string[] args)
{
int age = 30; // 年齢
int score = 85; // テストの点数
int temperature = -5; // 気温(マイナスもOK)
Console.WriteLine(age);
Console.WriteLine(score);
Console.WriteLine(temperature);
Console.ReadLine();
}
}
C#int は、
- 小数点を含まない数(1, 0, -5 など)
- 個数、回数、点数など「数えられるもの」
に向いています。
long:もっと大きな整数
long は、int よりもずっと大きな範囲の整数を扱える型です。 例えば、ID や大きなカウンタ値などに使われます。
class Program
{
static void Main(string[] args)
{
long population = 125000000; // 人口など、大きな数
long bigNumber = 9000000000000; // とても大きな数
Console.WriteLine(population);
Console.WriteLine(bigNumber);
Console.ReadLine();
}
}
C#初心者のうちは、
- 普通の整数 →
int - すごく大きな整数が必要になったら →
long
というイメージで十分です。
小数型:double と decimal
double:一般的な小数
double は、もっともよく使われる小数型です。 身長、重さ、距離など、一般的な「小数を含む数値」に使われます。
class Program
{
static void Main(string[] args)
{
double height = 172.5; // 身長
double weight = 65.3; // 体重
double pi = 3.14159; // 円周率
Console.WriteLine(height);
Console.WriteLine(weight);
Console.WriteLine(pi);
Console.ReadLine();
}
}
C#double は「浮動小数点数」と呼ばれ、 とても広い範囲の値を扱えますが、 厳密な計算では「わずかな誤差」が出ることがあります。
decimal:お金など「誤差を嫌う」場面向け
decimal は、主に「お金」などの計算に使われる小数型です。 double よりも誤差が出にくく、金額計算に向いています。
class Program
{
static void Main(string[] args)
{
decimal price = 1000.50m; // 金額(末尾の m が decimal を表します)
decimal taxRate = 0.10m; // 消費税率 10%
decimal tax = price * taxRate;
decimal total = price + tax;
Console.WriteLine($"価格:{price} 円");
Console.WriteLine($"消費税:{tax} 円");
Console.WriteLine($"合計:{total} 円");
Console.ReadLine();
}
}
C#ここでの重要ポイントは、
decimalのリテラルにはmを付ける必要があること(1000.50mのように)- 金額やレートなど、「誤差が困る計算」に向いていること
です。
初心者のうちは、
- 一般的な小数 →
double - 金額計算 →
decimal
と覚えておくとよいです。
文字列型:string
文章や名前を扱う型
string は、「文字列(テキスト)」を扱う型です。 名前、メッセージ、住所など、文字の並びを扱うときに使います。
class Program
{
static void Main(string[] args)
{
string name = "佐藤太郎"; // 名前
string message = "C# を勉強中です。";
string address = "東京都新宿区";
Console.WriteLine(name);
Console.WriteLine(message);
Console.WriteLine(address);
Console.ReadLine();
}
}
C#文字列は、
- ダブルクォーテーション
" "で囲む - 空文字列は
""と書く
というルールがあります。
string empty = ""; // 何も入っていない文字列
C#1文字型:char
1文字だけを扱う型
char は、「1文字だけ」を扱う型です。 string が「文字列(複数文字)」なのに対して、char は「単一の文字」です。
class Program
{
static void Main(string[] args)
{
char grade = 'A'; // 成績(1文字)
char symbol = '#'; // 記号(1文字)
Console.WriteLine(grade);
Console.WriteLine(symbol);
Console.ReadLine();
}
}
C#ここでのポイントは、
charはシングルクォーテーション' 'で囲むこと"A"はstring、'A'はcharであること
です。
初心者のうちは、
- 名前や文章 →
string - 1文字だけを扱いたいとき →
char
という使い分けで十分です。
真偽値型:bool
「はい/いいえ」「真/偽」を表す型
bool は、
true(真)false(偽)
の2つだけを取る型です。
条件分岐(if 文)などでよく使われます。
class Program
{
static void Main(string[] args)
{
bool isStudent = true; // 学生かどうか
bool isMember = false; // 会員かどうか
Console.WriteLine(isStudent);
Console.WriteLine(isMember);
Console.ReadLine();
}
}
C#bool は、
- 「〜かどうか」を表すフラグ
- 条件式の結果
などに使われます。
例えば、
int age = 20;
bool canDrink = age >= 20; // 20歳以上かどうか
Console.WriteLine(canDrink); // true が表示されます
C#のように、比較の結果として bool が得られます。
値型と参照型の概要
値型とは
int, long, double, decimal, bool, char などは、値型 と呼ばれます。
値型のイメージは、
変数そのものが「値」を直接持っている
というものです。
int a = 10;
int b = a; // a の値が b にコピーされます
a = 20;
Console.WriteLine(a); // 20
Console.WriteLine(b); // 10(b は変わりません)
C#ここで、
b = a;の時点で「値のコピー」が行われている- その後
aを変えても、bには影響しない
というのが値型の特徴です。
参照型とは
string や、後で学ぶ class で作るオブジェクトなどは、参照型 と呼ばれます。
参照型のイメージは、
変数は「値がある場所への参照(ポインタのようなもの)」を持っている
というものです。
初心者向けには、
- 値型 → 「箱に値が直接入っている」
- 参照型 → 「箱の中には、値が置いてある場所へのメモが入っている」
くらいのイメージで十分です。
string は参照型だが、値型のように扱える
string は参照型ですが、
- 代入するときに「値のコピー」が行われる
- 変更するときは新しい文字列が作られる
という性質があり、初心者のうちは「値型に近い感覚」で扱えます。
string s1 = "Hello";
string s2 = s1; // s1 の内容が s2 にコピーされます
s1 = "World";
Console.WriteLine(s1); // World
Console.WriteLine(s2); // Hello(s2 は変わりません)
C#参照型の詳しい挙動は、 オブジェクト指向(クラスや配列など)を学ぶタイミングで改めて深掘りしていくとよいです。
データ型の総合例:簡単なプロフィール+計算
いろいろな型をまとめて使ってみる
Day 3 の学習項目をすべて使った例として、 簡単なプロフィール+計算プログラムを書いてみます。
using System;
class Program
{
static void Main(string[] args)
{
// 整数型(int)
int age = 28;
// 大きな整数型(long)
long userId = 10000000001;
// 小数型(double)
double height = 172.5;
// 金額計算用の小数型(decimal)
decimal monthlySalary = 250000m;
decimal bonusRate = 0.2m;
decimal bonus = monthlySalary * bonusRate;
// 文字列型(string)
string name = "佐藤太郎";
string job = "エンジニア";
// 1文字型(char)
char grade = 'A';
// 真偽値型(bool)
bool isActive = true;
Console.WriteLine("=== プロフィール ===");
Console.WriteLine($"ユーザーID:{userId}");
Console.WriteLine($"名前:{name}");
Console.WriteLine($"年齢:{age} 歳");
Console.WriteLine($"身長:{height} cm");
Console.WriteLine($"職業:{job}");
Console.WriteLine($"評価:{grade} ランク");
Console.WriteLine($"アクティブ会員:{isActive}");
Console.WriteLine($"月給:{monthlySalary} 円");
Console.WriteLine($"ボーナス:{bonus} 円");
Console.ReadLine();
}
}
C#このコードの中で、
int→ 年齢long→ ユーザーIDdouble→ 身長decimal→ 月給とボーナスstring→ 名前・職業char→ 評価ランクbool→ アクティブ会員かどうか
というように、各データ型が「意味のある情報」として使われています。
Day 3 のまとめ
Day 3 では、C# の基本的なデータ型として、
int→ 一般的な整数long→ とても大きな整数double→ 一般的な小数decimal→ 金額など誤差を嫌う小数string→ 文字列(文章・名前など)char→ 1文字bool→ 真偽値(true / false)- 値型 → 変数が値を直接持つ型(
int,double,boolなど) - 参照型 → 変数が「値の場所」を指す型(
stringやクラスなど)
を、例題とコードとともに確認しました。
データ型は、
- 「この値は何を表しているのか」
- 「どんな範囲・精度が必要なのか」
を考えながら選ぶことが大切です。
ぜひ、
- 自分のプロフィールや家計簿などを題材にして、いろいろな型を試してみる
intとdouble、doubleとdecimalの違いを意識して使い分けてみるboolを使って「〜かどうか」を表現してみる
といった練習を通して、「値の種類に応じて型を選ぶ感覚」を育てていってください。
Day 3 練習のゴール
この練習では、「商品情報」を題材にして、Day 3 で学んだデータ型を実際に使ってみます。 管理したい項目は次のとおりです。
- 商品名
- 価格
- 個数
- 消費税
- 在庫あり・なし
これらを、
intdouble/decimalstringbool
といった型でどう表現するかを、ステップバイステップで確認していきます。
商品情報を日本語で設計する
まず「何をどう表すか」を言葉で整理する
商品情報を管理するとき、次のように考えます。
- 商品名 → 文字列(テキスト)
- 価格 → 金額(小数を含む可能性あり)
- 個数 → 整数
- 消費税 → 税率(小数)または税額(小数)
- 在庫あり・なし → はい/いいえ(真偽値)
この「日本語での整理」が、そのままデータ型選びにつながります。
商品名:string で表現する
文字列型 string
商品名は文字列なので、string 型で表現します。
using System;
class Program
{
static void Main(string[] args)
{
// 商品名(文字列)
string productName = "ノートPC"; // 商品名を表す変数
Console.WriteLine($"商品名:{productName}");
Console.ReadLine();
}
}
C#ここでのポイントは、
- 商品名は「文字の並び」なので
stringが自然であること - 変数名を
productNameのように意味が分かる名前にしていること
です。
価格と消費税:decimal で金額を扱う
金額は誤差を嫌うので decimal が向いています
価格や消費税は「お金」に関わるので、誤差が出にくい decimal 型を使うのが基本です。
using System;
class Program
{
static void Main(string[] args)
{
// 価格(税抜き)
decimal price = 100000m; // 価格 100,000 円(末尾の m が decimal を表します)
// 消費税率
decimal taxRate = 0.10m; // 消費税率 10%
// 消費税額と税込価格を計算
decimal tax = price * taxRate;
decimal priceWithTax = price + tax;
Console.WriteLine($"税抜価格:{price} 円");
Console.WriteLine($"消費税:{tax} 円");
Console.WriteLine($"税込価格:{priceWithTax} 円");
Console.ReadLine();
}
}
C#重要なポイントは、
decimalリテラルには必ずmを付けること- 金額や税率など、「誤差が困る計算」に
decimalを使うこと
です。
個数:int で表現する
個数は「数えられる整数」なので int
在庫数や購入個数など、「数えられるもの」は int で表現します。
using System;
class Program
{
static void Main(string[] args)
{
// 在庫個数
int stockCount = 15; // 在庫が 15 個ある
// 購入個数
int orderCount = 2; // お客様が 2 個購入
Console.WriteLine($"在庫数:{stockCount} 個");
Console.WriteLine($"購入数:{orderCount} 個");
Console.ReadLine();
}
}
C#ここでのポイントは、
- 個数は小数点を含まないので
intが自然であること - 「〜Count」という名前が「数」であることを分かりやすくしていること
です。
在庫あり・なし:bool で表現する
真偽値型 bool
在庫が「あるか」「ないか」は、はい/いいえの2択なので bool がぴったりです。
using System;
class Program
{
static void Main(string[] args)
{
// 在庫があるかどうか
bool isInStock = true; // 在庫ありなら true、なしなら false
Console.WriteLine($"在庫あり:{isInStock}");
Console.ReadLine();
}
}
C#さらに、在庫数から在庫あり・なしを判定することもできます。
int stockCount = 15;
bool isInStock = stockCount > 0; // 在庫数が 0 より大きければ在庫あり
Console.WriteLine($"在庫数:{stockCount} 個");
Console.WriteLine($"在庫あり:{isInStock}");
C#ここでの重要ポイントは、
boolはtrue/falseの2値だけを取ること- 「〜かどうか」を表すフラグに向いていること
です。
すべての項目をまとめた商品情報プログラム
Day 3 の型を組み合わせて使う
ここまでの内容をまとめて、「商品情報を表示するプログラム」を書いてみます。
using System;
class Program
{
static void Main(string[] args)
{
// 商品名(string:文字列)
string productName = "ノートPC";
// 価格(decimal:金額)
decimal price = 100000m; // 税抜価格
decimal taxRate = 0.10m; // 消費税率 10%
// 個数(int:整数)
int stockCount = 15; // 在庫数
int orderCount = 2; // 購入数
// 在庫あり・なし(bool:真偽値)
bool isInStock = stockCount > 0; // 在庫数が 0 より大きければ在庫あり
// 消費税額と税込価格を計算
decimal tax = price * taxRate;
decimal priceWithTax = price + tax;
Console.WriteLine("=== 商品情報 ===");
Console.WriteLine($"商品名:{productName}");
Console.WriteLine($"税抜価格:{price} 円");
Console.WriteLine($"消費税率:{taxRate * 100} %");
Console.WriteLine($"消費税額:{tax} 円");
Console.WriteLine($"税込価格:{priceWithTax} 円");
Console.WriteLine($"在庫数:{stockCount} 個");
Console.WriteLine($"購入数:{orderCount} 個");
Console.WriteLine($"在庫あり:{isInStock}");
Console.ReadLine();
}
}
C#このコードの中で、
string→ 商品名decimal→ 価格・消費税率・消費税額・税込価格int→ 在庫数・購入数bool→ 在庫あり・なし
というように、各データ型が「意味のある情報」として使われています。
値型と参照型の視点で見てみる
この練習で登場した型の分類
今回使った型を、値型と参照型に分けると次のようになります。
- 値型
int(在庫数・購入数)decimal(価格・税率・税額)bool(在庫あり・なし)
- 参照型
string(商品名)
値型は「変数が値を直接持つ」イメージで、 参照型は「変数が値の場所を指している」イメージでした。
この段階では、
- 整数・小数・真偽値 → 値型
- 文字列 → 参照型
くらいの理解で十分です。
Day 3 練習のまとめ
この練習では、
- 商品名 →
string - 価格・消費税 →
decimal - 個数 →
int - 在庫あり・なし →
bool
という形で、Day 3 のデータ型を実際の「商品情報」に当てはめてみました。
ポイントは、
- 「何を表している値か」を考えて型を選ぶこと
- 金額には
decimal、個数にはint、はい/いいえにはbool、文字にはstringを使うこと - それぞれの型が「意味のある情報」として自然に使われているかを意識すること
です。
ぜひ、
- 商品を増やして複数の商品情報を管理してみる
- 消費税率を変えて計算結果の違いを試してみる
- 在庫数が 0 のときに
isInStockがどうなるか確認してみる
といったアレンジをしながら、データ型の選び方と使い方を体に馴染ませていってください。
