1日目のゴールと全体像
1日目のテーマは 「C#で電卓アプリを作るための“土台となる考え方”をつかむこと」 です。
この7日間で目指すのは、コンソールベースでも構いませんが、 「四則演算ができて、履歴も扱える電卓アプリ」 を C#のオブジェクト指向を使って作り切ることです。
1日目では、まだ完成形は目指しません。 代わりに、次の5つを 電卓という具体的なイメージと結びつけて理解すること をゴールにします。
- 基本文法:変数・if・ループ・メソッドのイメージ
- クラス:電卓そのものを「クラス」として考える
- コレクション:計算履歴を「リスト」として扱う
- LINQ:履歴を“検索・集計”するイメージを持つ
- ファイル操作:履歴をファイルに保存するイメージを持つ
ここでは、まだすべてを完璧に書けなくて大丈夫です。 「電卓アプリの中に、これら5つがどう入り込むのか」を、 ストーリーとしてつかむことを大事にしていきます。
基本文法:電卓の“入力・計算・出力”をコードで表す
変数と演算のイメージ
電卓アプリの最もシンプルな形は、 「2つの数字と1つの演算子を受け取って、結果を表示する」 というものです。
C#では、こんなコードになります。
int a = 10;
int b = 5;
char op = '+';
int result = 0;
if (op == '+')
{
result = a + b;
}
else if (op == '-')
{
result = a - b;
}
else if (op == '*')
{
result = a * b;
}
else if (op == '/')
{
result = a / b;
}
Console.WriteLine("結果: " + result);
C#ここで押さえたいポイントは、
- 変数:
int a,int b,char op,int result - 条件分岐:
if,else ifで演算子に応じた処理を選ぶ - 演算:
+,-,*,/で計算する - 出力:
Console.WriteLineで結果を表示する
電卓は「入力 → 計算 → 出力」という流れがはっきりしているので、 基本文法を学ぶ題材としてとても分かりやすいです。
メソッドとしてまとめるイメージ
同じ処理を何度も使いたくなったら、 メソッド にまとめるとスッキリします。
int Calculate(int a, int b, char op)
{
int result = 0;
if (op == '+')
result = a + b;
else if (op == '-')
result = a - b;
else if (op == '*')
result = a * b;
else if (op == '/')
result = a / b;
return result;
}
C#そして、呼び出し側はこうなります。
int r = Calculate(10, 5, '+');
Console.WriteLine("結果: " + r);
C#ここで深掘りしたいのは、 「メソッドは“意味のある処理のかたまり”」 だということです。
電卓では「計算する」という意味のかたまりを Calculate というメソッドにしておくと、 後からコードを読む人にも意図が伝わりやすくなります。
クラス:電卓そのものを“ひとつのオブジェクト”として考える
電卓クラスのイメージ
C#はオブジェクト指向言語なので、 電卓そのものを クラス として表現できます。
「電卓クラス」は、ざっくり言うと次のような役割を持ちます。
- 計算を行うメソッドを持つ
- 計算履歴を持つ
- 将来的に「メモリ機能」などを追加できる
まずは、シンプルな電卓クラスのイメージを見てみましょう。
class Calculator
{
public int Calculate(int a, int b, char op)
{
int result = 0;
if (op == '+')
result = a + b;
else if (op == '-')
result = a - b;
else if (op == '*')
result = a * b;
else if (op == '/')
result = a / b;
return result;
}
}
C#使う側はこうなります。
Calculator calc = new Calculator();
int result = calc.Calculate(10, 5, '+');
Console.WriteLine("結果: " + result);
C#ここで重要なのは、 「Calculator というクラスが“電卓という概念”を表している」 ということです。
Calculateメソッド → 電卓の「計算する」機能Calculatorクラス → 電卓という「モノ」
このように、 現実世界の「電卓」をコードの世界の「クラス」に対応させる のがオブジェクト指向の基本的な考え方です。
コレクション:計算履歴を“リスト”として扱う
計算履歴を List で持つイメージ
電卓アプリを少しだけ育てると、 「過去の計算履歴を残したい」という欲が出てきます。
例えば、
10 + 5 = 153 * 4 = 12100 - 30 = 70
といった履歴を、後から見返せるようにしたいわけです。
C#では、こうした「複数のデータ」を扱うときに コレクション(特に List<T>) を使います。
まず、履歴を表すクラスを作ります。
class CalculationHistory
{
public int Left { get; set; }
public int Right { get; set; }
public char Operator { get; set; }
public int Result { get; set; }
public override string ToString()
{
return $"{Left} {Operator} {Right} = {Result}";
}
}
C#そして、電卓クラスに履歴のリストを持たせます。
class Calculator
{
private List<CalculationHistory> histories = new List<CalculationHistory>();
public int Calculate(int a, int b, char op)
{
int result = 0;
if (op == '+')
result = a + b;
else if (op == '-')
result = a - b;
else if (op == '*')
result = a * b;
else if (op == '/')
result = a / b;
var history = new CalculationHistory
{
Left = a,
Right = b,
Operator = op,
Result = result
};
histories.Add(history);
return result;
}
public List<CalculationHistory> GetHistories()
{
return histories;
}
}
C#ここで深掘りしたいのは、 「List は“増えていくデータの箱”」 だということです。
電卓では、計算するたびに履歴が増えていきます。 それを List<CalculationHistory> として持っておくことで、 後から「全部表示する」「条件で絞る」といったことができるようになります。
LINQ:履歴を“検索・集計するための道具”としてイメージする
LINQで履歴を絞り込むイメージ
LINQ(リンク)は、 「コレクションに対して、検索・並べ替え・集計を行うための仕組み」 です。
電卓の履歴に対して、例えば
- 足し算だけを取り出したい
- 結果が 100 以上の履歴だけ見たい
- 平均値を知りたい
といったことができます。
例として、「足し算だけの履歴」を取り出すコードを見てみましょう。
var plusHistories = histories
.Where(h => h.Operator == '+')
.ToList();
C#「結果が 100 以上の履歴」を取り出すならこうです。
var bigResults = histories
.Where(h => h.Result >= 100)
.ToList();
C#平均値を計算するならこうです。
var average = histories
.Select(h => h.Result)
.Average();
C#ここで深掘りしたいのは、 「LINQは“履歴に対して質問するための言語”」 だということです。
Where→ 条件で絞り込むSelect→ 欲しい項目だけ取り出すAverage→ 平均を計算する
電卓の履歴を題材にすると、 LINQの役割がとても分かりやすくなります。
ファイル操作:履歴を“電卓の記憶”として保存する
履歴をテキストファイルに書き出すイメージ
電卓アプリをさらに育てると、 「アプリを終了しても履歴を残しておきたい」 という欲が出てきます。
そこで登場するのが ファイル操作 です。
C#では、System.IO 名前空間のクラスを使って ファイルに書き込んだり、読み込んだりできます。
履歴をテキストファイルに保存する例を見てみましょう。
using System.IO;
class Calculator
{
private List<CalculationHistory> histories = new List<CalculationHistory>();
// Calculate は前と同じ
public void SaveHistories(string filePath)
{
using (var writer = new StreamWriter(filePath))
{
foreach (var h in histories)
{
writer.WriteLine($"{h.Left},{h.Operator},{h.Right},{h.Result}");
}
}
}
}
C#ここで深掘りしたいのは、 「ファイルは“電卓の記憶”」 だということです。
- List → アプリ起動中の記憶
- ファイル → アプリ終了後も残る記憶
電卓の履歴をファイルに保存しておけば、 次回起動時に読み込んで、 「前回までの履歴」を再現することもできます。
1日目で本当に掴んでほしいこと
1日目は、まだ完成した電卓を作る日ではありません。 代わりに、次の5つを 電卓という具体的なイメージと結びつけて理解する日 です。
- 基本文法:変数・if・メソッドで「入力 → 計算 → 出力」を表現できる。
- クラス:
Calculatorクラスとして「電卓というモノ」をコードで表現できる。 - コレクション:
List<CalculationHistory>として「増えていく履歴」を扱えるイメージを持つ。 - LINQ:履歴に対して「条件で絞る」「平均を出す」といった“質問”ができる。
- ファイル操作:履歴をファイルに保存することで「電卓の記憶」を残せるイメージを持つ。
この1日目のイメージがあると、 2日目以降で「実際に電卓クラスを作り、履歴やファイル保存を実装していく」ときに、 「何をどこに書けばいいか」 が迷いにくくなります。
電卓という小さなアプリの中に、 C#の基礎——基本文法・クラス・コレクション・LINQ・ファイル操作——がぎゅっと詰まっています。 ここから少しずつ、実際のコードを肉付けしていきましょう。


