【学習】C# クラスが分からない人へ(まずは「まとめる」と気づく)

広告

これまでの学習では、

  • string や int に値を入れる
  • 変数をいくつか並べて使う

という形でプログラムを動かしてきました。

しかし、データが増えると 別の困り方 が出てきます。

名前と HP がバラバラの変数だと、誰の値か分かりにくい

という状況です。

今回は「説明から入らず」、普通に書いたあとで違和感が生まれる流れで、class が欲しくなる理由にたどり着きます。


ソリューションとプロジェクトを作る

Visual Studio で次のプロジェクトを作ります。

  • テンプレート: コンソール アプリ
  • プロジェクト名ClassAwakening01(任意)

以降のコードは Program.cs の Main に書いて実行できます。


まずは普通に書いてみる(1人)

キャラクターを1人分だけ書きます。

string name = "勇者";
int hp = 100;

ここまでは問題ありません。


2人に増やす

string name1 = "勇者";
int hp1 = 100;

string name2 = "戦士";
int hp2 = 120;

これもまだ普通です。


少しだけ作業を増やす(HP を減らす)

hp1 -= 10;
hp2 -= 20;

ここで立ち止まって考えてみる

次のような気持ちになりませんか?

  • 名前と HP を セットで扱いたい
  • hp1 が 誰の HP か、コードを読むたびに確認したくなる
  • 人数が増えたら 同じパターンの変数が増えそう

もし「なんかゴチャゴチャしてきた」と感じたなら、それが スタート地点 です。


キャラクターは「セットの情報」

キャラクターが持っている情報の例です。

  • 名前
  • HP
  • (あとから)攻撃力 など

つまり ひとまとまりのデータ です。


その「セット」を型として書く

ここで初めて class を出します。

class Player
{
    public string Name;
    public int Hp;
}

使ってみる

Player p1 = new Player();
p1.Name = "勇者";
p1.Hp = 100;

Player p2 = new Player();
p2.Name = "戦士";
p2.Hp = 120;

p1.Hp -= 10;
p2.Hp -= 20;

さきほどの name1 / hp1 と比べて、読みやすさや間違いにくさを感じたら、その感覚で大丈夫です。


さらに楽にする(コンストラクタ)

いまは2行で初期化しています。

p1.Name = "勇者";
p1.Hp = 100;

作るときにまとめて決めたい ときに使うのがコンストラクタです。

class Player
{
    public string Name;
    public int Hp;

    public Player(string name, int hp)
    {
        Name = name;
        Hp = hp;
    }
}

呼び出しは次の1行になります。

Player p = new Player("勇者", 100);

難しく考えなくて大丈夫です。「キャラクターを new するときに、最初から中身を決めている」 だけです。


完成コード(例)

using System;

namespace ClassAwakening01
{
    class Player
    {
        public string Name;
        public int Hp;

        public Player(string name, int hp)
        {
            Name = name;
            Hp = hp;
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            Player p1 = new Player("勇者", 100);
            Player p2 = new Player("戦士", 120);

            p1.Hp -= 10;
            p2.Hp -= 20;

            Console.WriteLine($"{p1.Name} の HP は {p1.Hp}");
            Console.WriteLine($"{p2.Name} の HP は {p2.Hp}");
        }
    }
}

プログラムの流れ

Player を new する(名前と HP を決める)
        ↓
フィールドを使って HP を変更する
        ↓
表示する

重要ポイント(用語はここでまとめる)

クラス は、この記事では次のように捉えれば十分です。

  • 同じ種類のデータをまとめるための型

クラスは 暗記する道具 ではなく、変数が増えて困ったときに自然に欲しくなる道具 です。


最後の問い(次回への扉)

「勇者を 3人 作る」としたら、どう書きますか?

  • new Player(...) を増やす発想になれたら OK です。
  • name1, name2, name3 のように 変数名だけが増える のが一番ラクに見えるなら、もう一度この記事を最初から読むか、次回 List で人数を増やす で「変数名を増やさない」方向を試してください。

発展アイデア

訪問数 3 回, 今日の訪問数 3回

広告