列挙型(enum)

今回は列挙型について説明します。
列挙型を用いることで、特定の物事を1つの型としてとりまとめることができるようになります。
列挙型を用いなくても機能的には問題ないプログラムを作成することはできますが、列挙型を用いることでソースコードの書きやすさと読みやすさが向上します。
(書きやすく読みやすいということは、不具合も起こりにくいソースコードになります。)

ぜひ使ってみましょう。

動かしてみよう

では、サンプルコードを動かしてみましょう。
enum と switch を組み合わせて、悟空がどのサイヤ人形態かを表示するプログラムです。
(switch文についての説明はこちら(switch文))

入力欄に 0〜3 までのいずれかの数値を入れて、実行ボタンを押してください。(0〜3以外は例外です。)

実行できましたか?
どのサイヤ人形態かが表示されたと思います。

では、解説に進みましょう。

解説

列挙型の基本構文は下記です。
これにより型を作成することができます。
なお、型名や列挙子には好きな名称をつけることができますし、個数についても任意です。
数値については他と重複しない限り、適当な値をつけることができます。

enum 型名
{
  列挙子a = 数値a,
  列挙子b = 数値b,
  ・・・
  列挙子z = 数値z
};
数値の部分は記述を省略することも可能です。
省略した場合、各列挙子には上から 0,1,2・・・ の数値が自動で割り当てられます。
自動で割り当てられたくない場合には、自分で記述する必要があります。
数値の部分は部分的に書くことも可能です。
仮に上記において、列挙子a = 10 と書き、以降は書かなかった場合、列挙子b以降には11,12,・・・ の数値が自動で割り当てられます。

上記はあくまで列挙型の作成をおこなったにすぎないので、実際に列挙型を使う場合には下記のように変数として宣言する必要があります。

enum 型名 変数名;

また、型の作成と変数定義は同時におこなうことも可能です。
その場合の記述は下記になります。

enum 型名
{
  列挙子a = 数値a,
  列挙子b = 数値b,
  ・・・
  列挙子z = 数値z
} 変数名;

列挙型は特定の物事を1つの型としてまとめることができるので、switch文との相性がよいです。
サンプルコードでもswitchと組み合わせて用いています。

下記にサンプルコードで列挙型を用いなかった場合の例を示します。

    switch( gokuu )
    {
        case 0:
            printf("サイヤ人です。");
            break;
        case 1:
            printf("超サイヤ人です。");
            break;
        case 2:
            printf("超サイヤ人2です。");
            break;
        case 3:
            printf("超サイヤ人3です。");
            break;
        default:
            printf("サイヤ人ではありません。");
            break;
    }

switch – case 文が単なる数値の0〜3になっていて、ソースコードの意味合いが伝わりにくくなったと思います。
case 1: と書いてあるよりも、case SUPER1: と書いてある方が、超サイヤ人っぽいですよね。

switchによる分岐をさせる際には「列挙型つくれないかなー?」、逆に列挙型を作った際には「switch使えないかなー?」と考えてみることは良い習慣だと思いますので、ぜひ気にとめるようにしましょう。

まとめ

まとめです。

  • enum と書くことで列挙型が作れます。
  • 列挙型は物事をまとめるのに便利です。
  • 列挙型はswitch文と相性が良いです。

以上です。
ではまた。

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