C++/CLIをつつく9ー列挙体。数字に名前をつけよう。
列挙体を感じてもうにはやっぱり実例を見るのが一番。
じゃあ早速簡単なサンプルを見せるピヨ。
#include "stdafx.h"
using namespace System;
namespace Test {
enum struct Color : Byte //数値の型を指定しよう。
{
Red,
Green = 100, //数値を直接定義できる
Yellow, //ここから1づつ増える
Purple
};
}
int main(array ^args)
{
Console::WriteLine( "{0}の値は{1}です。",
Test::Color::Red, (Byte) Test::Color::Red);
Console::WriteLine( "{0}の値は{1}です。",
Test::Color::Green, ( Byte ) Test::Color::Green );
Console::WriteLine( "{0}の値は{1}です。",
Test::Color::Yellow, ( Byte ) Test::Color::Yellow );
Console::WriteLine( "{0}の値は{1}です。",
Test::Color::Purple, ( Byte ) Test::Color::Purple );
return true;
}
どう?列挙体の感じがつかめた? 列挙体は数値に名前をつけたものなんだ。 だからGreen=100のように数値を直接指定できるし、数値としても扱えるピヨ。 この短い例ではあまり列挙体のありがたみがわからないかもしれないけど、長いプログラムを書いている時に威力を発揮するんだ。 例えば、数百箇所に0という文字列を直接書いた場合、0を100に変更する場合、とても面倒だし直し忘れとか生じてバグを生んでします。 だから列挙体の一箇所で数値に名前をつけて管理するのがいいんだ。 それに0じゃあ意味わからないけどColor.Redだったらなんとなくプログラムの意味がわかるよね?
だから読み易いプログラムを作る際にも重要なものなんだ。
後これは余談だけど、難読化をする際にも便利なんだ。 プログラムが他人に読まれないように難読化ソフトをしようするときがあるけど、その際に"Red"とかしていたら、 難読化されて"eew@[q"とかになるから、if(str=="Red")とかの判定が上手く出来ないんだ。 一方列挙体にしておくと、難読化ソフトも列挙体そのものを難読化し、 列挙体が使用されているところもちゃんと判断してくれるから、予想できないプログラムの動作が起こりにくくなるんだ。 以上列挙体についてでした。 次の記事は構造体にするピヨね。 おしまい。