全知全能を目指す人のありがたい雑記

何かしら意味のあるありがた~い話か、意味のない雑念だらけの日記を書く予定です。

【パワー系PG】データを整数型で表現しないで列挙型を使え

あなたのプログラム、「intを不必要に多用」してませんか?

どの言語にもenumみたいな列挙型ってあると思うんだ。
C言語における、intとenumによる実装の違いを紹介しよう。

intを使ったときの実装

#include <stdio.h>

int main(void){
    
    int warningRate; //2桁入力【例:36】
    scanf("%02d", &warningRate);
    
    int signal;
    
    if(warningRate < 50){
        signal= 0;
    }
    else if(warningRate < 75){
        signal= 1;
    }
    else{
        signal= 2;
    }
    
    switch(signal){
        case 0:
            printf("緑、今日も平和だ");
            break;
        case 1:
            printf("黄、危ない予感");
            break;
        case 2:
            printf("赤、逃げろー!");
            break;
    }
}

読ませる側や保守・運用を考えない
パワー系PGの臭いがする!!

enumを使ったときの実装

#include <stdio.h>

enum Signal{
    Green,
    Yellow,
    Red,
};

int main(void){
    
    int warningRate; //2桁入力【例:36】
    scanf("%02d", &warningRate);
    
    enum Signal s;
    
    if(warningRate < 50){
        s = Green;
    }
    else if(warningRate < 75){
        s = Yellow;
    }
    else{
        s = Red;
    }
    
    switch(s){
        case Green:
            printf("緑、今日も平和だ");
            break;
        case Yellow:
            printf("黄、危ない予感");
            break;
        case Red:
            printf("赤、逃げろー!");
            break;
    }
}

何が言いたいか

int signal;って変数に
0とか1とか2って入れてるけど、
signalが0だと何なの?signalが1って何?2って?

見ただけじゃあ判断ができない。
0や1や2である意味は、
後続の処理から推測するしか方法がない。

何でもかんでもintやstringで解決する輩が一定多数いるので
気になって仕方が無い。

あと、余談だがenum⇔intの相互変換もできる。

以上

enumっていう数値を名前付き定数として
表現できるものがあるんだから使おうぜ~。。