(以下、既存内容は省略)
この授業で作成するプログラムの「クラス名」「関数名」「変数名」などは、以下のルールに統一します。 プログラムの可読性・保守性を高めるため、できるだけルールに沿って記述してください。
※ ただし、一時的に使う変数(例:i, j, tmpなど)は例外とします。
おすすめの補足ルール:
例:
例:
例:
補足:なぜメンバ変数にアンダースコアを付けるのか?
クラスの中でローカル変数とメンバ変数の名前が重なると、どちらを指しているか分かりづらくなることがあります。
アンダースコアを付けることで、「これはメンバ変数です」と明確に区別できるようになります。
特にコンストラクタやセッターで、引数とメンバ変数が同じ名前になる場合にも混乱を避けられます。
例:
class Player { public: Player(int hp) { hp_ = hp; // メンバ変数と引数が区別できる } private: int hp_; };
例:
例:
→ 外部ファイルからのアクセスを防ぎ、安全にファイル内で共有できます。
例:
namespace { int globalCounter = 0; const int SCREEN_WIDTH = 1280; const int SCREEN_HEIGHT = 720; }
このようにしておくことで、他のファイルと名前がぶつかるのを防ぎつつ、明確に「このファイルだけで使う」と分かる設計になります。
例:
例:`GameState`, `Direction`, `InputType`
例:`STATE_TITLE`, `STATE_PLAYING`, `DIR_UP`, `DIR_DOWN`
例:`INPUT_KEY_A`, `INPUT_MOUSE_LEFT` など
例:
enum GameState { STATE_TITLE, STATE_PLAYING, STATE_GAMEOVER }; enum Direction { DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT };
このようにすることで、enumの項目が定数と明確に区別され、コードの読みやすさと一貫性が向上します。
C++では列挙型に2つの書き方があります。それぞれに特徴があります。
例:
enum Direction { UP, DOWN }; int dir = UP; // OK(暗黙のint)
例:
enum class Direction { Up, Down }; Direction dir = Direction::Up; // スコープ付きで明示的
→ 名前の衝突がなく、型安全で保守性が高いため。
このルールに慣れていくことで、大規模なプログラムでも読みやすく、他人と共同で開発しやすくなります。
例:
if (x > 1280) { // 1280が何を意味するのか分かりづらい! }
// NG if (x > 1280) { ... } // OK const int SCREEN_WIDTH = 1280; if (x > SCREEN_WIDTH) { ... }
// NG for (int i = 0; i < 4; ++i) { ... } // OK const int MAX_ENEMIES = 4; for (int i = 0; i < MAX_ENEMIES; ++i) { ... }
// NG if (frame >= 60) { ... } // OK const int FRAME_WAIT = 60; if (frame >= FRAME_WAIT) { ... }
// NG SetColor(255, 0, 0); // 何の色? // OK const int COLOR_RED[3] = {255, 0, 0}; SetColor(COLOR_RED[0], COLOR_RED[1], COLOR_RED[2]);
// NG velocity.y += 9.8f; // OK const float GRAVITY = 9.8f; velocity.y += GRAVITY;