【C++】列挙型 (enum) の使い方 | 整数に分かりやすい名前を付ける方法

目次

はじめに

プログラムの中で、信号の色(赤・黄・青)や、曜日(日・月・火…)のように、互いに関連する一連の定数を扱いたい場合があります。これらの状態を、0, 1, 2 のような単なる整数(マジックナンバー)で管理すると、コードを読む人が「0 が赤だっけ?」と混乱し、可読性が著しく低下します。

このような問題を解決するのが「列挙型 (enumerated data type)」です。enum キーワードを使うことで、一連の整数定数に、人間にとって分かりやすい名前を付けることができます。

この記事では、enum の基本的な使い方と、それによってコードがどのように読みやすくなるのかを解説します。


enum を使ったサンプルコード

このコードは、SignalColor という列挙型を定義し、信号の色(RED, YELLOW, GREEN)を扱います。switch文を使って、現在の信号の色に応じたメッセージを表示します。

完成コード

#include <iostream>

using namespace std;

// 1. 列挙型を定義
enum SignalColor {
    RED,    // 0
    YELLOW, // 1
    GREEN   // 2
};

int main() {
    // 2. 列挙型の変数を宣言し、値を代入
    SignalColor currentSignal = GREEN;
    
    // 3. switch文で変数の値を判定
    switch(currentSignal) {
        case RED:
            cout << "信号は「赤」です。止まってください。" << endl;
            break;
        case YELLOW:
            cout << "信号は「黄」です。注意してください。" << endl;
            break;
        case GREEN:
            cout << "信号は「緑」です。進んでください。" << endl;
            break;
        default:
            cout << "信号の色が不明です。" << endl;
            break;
    }
    
    return 0;
}

実行結果

信号は「緑」です。進んでください。

コードの解説

1. enum SignalColor { RED, YELLOW, GREEN };

これが、列挙型を定義している部分です。

  • enum SignalColor: SignalColor という名前の新しい列挙型を定義します。
  • { RED, YELLOW, GREEN }: {} の中に、列挙子と呼ばれる識別子をカンマ区切りで並べます。
  • 自動的な整数割り当て: コンパイラは、列挙子に先頭から 0, 1, 2, … と自動的に整数値を割り当てます。つまり、内部的には RED0YELLOW1GREEN2 と同じです。

2. SignalColor currentSignal = GREEN;

定義した SignalColor 型を使って、currentSignal という名前の変数を宣言しています。そして、その変数に列挙子 GREEN(内部的には 2)を代入しています。int signal = 2; と書くよりも、コードの意図が遥かに明確になります。

3. switch(currentSignal) { case RED: ... }

switch文の case ラベルには、case 0: のように直接数値を書く代わりに、case RED: のように列挙子を書くことができます。これにより、コードが非常に読みやすく、直感的になります。


まとめ

今回は、C++の列挙型 enum の基本的な使い方を解説しました。

  • enum を使うと、一連の整数定数に分かりやすい名前を付けることができる。
  • 0, 1, 2 のようなマジックナンバーをコードから排除でき、可読性が大幅に向上する。
  • switchと組み合わせると、特に効果を発揮する。

enum は、プログラムの状態や種類などを管理する際に非常に便利な機能です。意味のある名前を付けることで、コードの意図を明確にし、バグの少ないプログラムを目指しましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次