
定数をたくさん使って、条件分岐したくなるときに、 enum (列挙型)という型を 使うと見やすいソースコードを書くことができるかもしれません。
例えば、状況に応じて条件分岐したいとき、複数の状態を switch 分や if~else文で処理するかと思います。
状態が「0」ならキャラクタは生存、「1」なら毒状態、「2」なら死亡状態、etc など、 数字と状態の対応表をあらかじめ考えておきます。
この数字を、例えば変数の文字列で置き換えておくと、ぱっと見て意味がわかりやすくなります。
#include <stdio.h>
enum Status {
ALIVE,
POISON,
DEAD,
HEAVEN
};
int main(){
enum Status plancStatus;
plancStatus = DEAD;
printf("ステータス番号:%d \n", plancStatus);
}
これを実行すると下のような結果になります。
ステータス番号:2
プレイやーの状態が 4 種類あるとして、「ALIVE」「POISON」「DEAD」「HEAVEN」を定数として 定義しています。
コードを確認してみましょう。
enum Status {
ALIVE,
POISON,
DEAD,
HEAVEN
};`
2 行目で enum という型が登場しています。
enum タグ名 { ・・・ };
という定義をすることで、enum 型を定義することができます。
ここではキャラクタのステータスを表す、「Status」というタグ名を付けています。
定数として定義(列挙)しておきたいものを一覧で記述しておくと、 自動的に整数の 0 から定数が割り振られます。
具体的に、列挙型 Status の中で、 「ALIVE = 0、POISION = 1、DEAD = 2、HEAVEN = 3」 という定数が割り当てられています。
自動的に列挙型に記載したものを 0 から +1 づつカウントして定数を割り当ててくれますが、 数値を自分で指定することもできます。
enum Status {
ALIVE, // 0
POISON = 5, // 5
DEAD, // 6
HEAVEN // 7
};`
列挙した定数 POISON に対して、直接、整数の 5 を指定しています。
この場合、後続の DEAD や HEAVEN は POISON から +1 していった数が割り当てられます。
typedef と組み合わせることで、構造体、共用体と同様に別名を割り当てできます。
これで enum Stasu xxxx
ではなく、単純にStatus xxxxx
のように、簡単な書き方で使うことができます。
#include <stdio.h>
typedef enum {
ALIVE,
POISON,
DEAD,
HEAVEN
} Status;
int main(){
Status plancStatus = ALIVE;
switch ( plancStatus ) {
case ALIVE:
printf("生きてます\n", plancStatus);
break;
case POISON:
printf("毒状態です\n", plancStatus);
break;
case DEAD:
printf("死んでいます\n", plancStatus);
break;
case HEAVEN:
printf("天国にいます\n", plancStatus);
break;
}
}
2 ~ 7 行目で列挙型の定義をしています。 typedef を使用し、 enum {・・・}
の中身を Status と定義することで、以降、Status 型として使うことができます。
enum を使用すると、定数をかぶらないように、名前として管理するのが簡単になり、 読みやすいコードになる場合があります。
define や const で定数を記述することもできますが、enum 型であれば あらかじめ列挙しておいた以外の値をいれようとしたとき、コンパイラが警告してくれるなど 実装しやすくなる場合もあります。
コメント、ありがとうございます。
ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。
Twitter:@NodachiSoft_jpお名前:以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください
お名前: