C# | 1 日 60 分 × 7 日アプリ学習:C#基礎・オブジェクト指向 電卓編

Web APP C#
スポンサーリンク
スポンサーリンク

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 = 15
  • 3 * 4 = 12
  • 100 - 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・ファイル操作——がぎゅっと詰まっています。 ここから少しずつ、実際のコードを肉付けしていきましょう。

タイトルとURLをコピーしました