初心者殺し「クラス」
プログラミングを学んでいると、必ずぶつかる巨大な壁があります。
「オブジェクト指向」
この言葉を聞いた瞬間、多くの初心者がアレルギー反応を起こし、PCをそっと閉じます。
本を開けば「クラスとは、たい焼きの型である」という、手垢のついた説明ばかり。たい焼きはもう食べ飽きました。
今日は、できるだけ直感的に解説します。
クラスとは「量産工場の設計図」です。
そしてあなたは、その設計図を使ってモンスターやロボットなど好きなものを無限に生み出す「工場長(あるいは神)」です。
クラス:ただの「紙切れ」に過ぎない
まず、コードを見てください。これがクラスです。
class Monster {
// ここに中身を書く
}Code language: PHP (php)
これは、ただの定義です。「モンスターとはこういうものだ」と書かれた設計図に過ぎません。
見ての通り、このままでは何も起きません。
設計図に向かって「攻撃しろ!」と叫んでも、紙が揺れるだけです。戦うためには、後でこの設計図をもとに、「実体化」させる必要があります。
プロパティとメソッド:スペックと必殺技
設計図には、2つの情報を書き込みます。
- プロパティ(Property):そのモノの特徴。データ。
- メソッド(Method):そのモノができること。処理。
RPGのモンスターで考えましょう。
class Monster {
// プロパティ(特徴)
public $name;
public $hp;
// メソッド(できること)
public function attack() {
echo "攻撃した!";
}
}Code language: PHP (php)
プロパティ:名前(name)や体力(hp)といったステータス。
メソッド:攻撃する(attack)という動作。中身は以前解説した「関数」と同じです。
これで「名前とHPを持ち、攻撃ができる何か」の設計図が完成しました。
※attack()ではechoがひとつだけなので、実際に攻撃しているようには見えないかもしれませんが、モンスターが攻撃を行うものとお考え下さい。
インスタンス化:命を吹き込む「new」
設計図ができたら、工場を稼働させます。ここで使う魔法の言葉が new です。
$slime = new Monster();Code language: PHP (php)
この瞬間、パソコンのメモリ上に「モンスターの実体」が誕生しました。
これを専門用語で「インスタンス(実体)」または「オブジェクト」と呼びます。
設計図(クラス)から、実物(インスタンス)がポンと飛び出してくる。
newを書くたびに、新しいモンスターが次々と産まれます。
$goblin = new Monster(); // ゴブリンを生む
$dragon = new Monster(); // ドラゴンを生むCode language: PHP (php)
1枚の設計図から、異なる個体を無限に量産できる。これがクラスを使う最大のメリットです。
アロー演算子(->):こいつに命令しろ
産まれたモンスターは、まだ空っぽです。名前もなければHPもありません。
こいつらを操作するために使うのが、矢印 -> です。
正式名称は「アロー演算子」ですが、「指差し確認」だと思ってください。
「お前の名前はこれだ!」
と指図するイメージです。
// スライムの設定
$slime->name = "スライム"; // 「スライム」という名前をつける
$slime->hp = 10; // HPが10と設定
// ゴブリンの設定
$goblin->name = "ゴブリン"; // 「ゴブリン」という名前をつける
$goblin->hp = 50; // HPが50と設定 Code language: PHP (php)
同じMonsterという設計図(クラス)から生まれましたが、中身(プロパティ)は別々です。
スライムがダメージを受けても、ゴブリンのHPは減りません。それぞれが独立した存在だからです。
メソッド(技)を使うときも矢印を使います。
$slime->attack(); // 結果:攻撃した!Code language: PHP (php)
まとめ:神の視点で世界を作れ
オブジェクト指向、などと難しく考える必要はありません。
- クラス:設計図を書く(class)
- インスタンス:実体化する(new)
- 操作:矢印でいじる(->)
これだけです。
もしクラスを使わずにRPGを作ろうとしたら、「スライムAの名前」「スライムAのHP」「スライムBの名前」……と、大量の変数を管理することになり、あなたは発狂します。
クラスを使えば、「モンスター」という概念を一つ作るだけで済みます。
あなたはコードの世界の創造主です。設計図を描き、newで命を吹き込み、世界を構築してください。
本記事では、クラスの中でも最も重要な概念を解説しました。クラスにある他の機能については他記事で解説しますので、お楽しみに!


コメント