列挙型の使い方とマジックナンバーの防ぎ方(C#)

  • このエントリーをはてなブックマークに追加

スポンサーリンク

※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~

目次

列挙型とは

列挙型を使えば、数字に対して、名前を割り振ることができます。

イメージとしては、ある数字が何を意味しているかわかるように、ラベルを貼り付けているようなものです。

※列挙型は、「列挙体」と呼ばれることがあります。

列挙型は以下のように定義されます。

アクセス修飾子 enum:データ型{
列挙子名=値,

}

enumは、「イーナム」と読まれることが多いようです。(人によって結構読み方がバラバラだったりします)

※enumの読み方(参考):http://yomikata.org/word/enum

列挙子名に割り振られる整数の型は指定しなければ、int型が採用されます。(int型以外にもbyte,sbyte,short,ushort,uint,long,ulongといった他の整数型も使用できます)

ソースコード(enumを使った場合)

実行結果

信号の色は黄です

Red、Yellow、Blueは「列挙子」と呼ばれます。

ソースコード(enumを使わなかった場合)

実行結果

信号の色は黄です

マジックナンバーについて

ここで、ソースコード(enumを使わなかった場合)を初めて見た人の気持ちになってみましょう。

int state = 1;

ってどういうこと???

と思うはずです。

enumを使ったソースコードを既に見ているので、数字の0が青色、数字の1が黄色、数字の2が赤色だということがわかるでしょう。

しかし、全くの初見だと、それぞれの数字が何を意味しているかわかりません。

プログラムを作った本人は理解できるが、他のプログラマーからは理解できない数字を「マジックナンバー」と呼ばれることがあります(たまに、作成した本人すら何を意味するか忘れたりしますが……)。

今回の場合は、数字の1がマジックナンバーになっています。

チームで仕事をしている場合、「マジックナンバー」を含むソースコードは嫌がられます。

このように数値自体に、何かしらの意味を持たせるのは好ましくありません。

こうした状況に対して、enumが有効な手段になりえます。

素早く記述する方法

switch文とenumの組み合わせはよく使われます。

Visual Studio(以下VSと略す)では、コードスニペットを使用することで素早く書けます。

まず、switch+「Tab」+「Tab」と書くと、以下のコードが素早く書けます。

switch (switch_on)
{
  default:
}

switch_onの部分(VS上では、オレンジ色でマークされている)を、今回の場合はstateと書き換えて、「Enter」キーを押すと以下のコードが表示されます。

switch (state)
{
  case Color.Blue:
    break;
  case Color.Yellow:
    break;
  case Color.Red:
    break;
  default:
    break;
}

割り当てられる数字について

列挙子に割り振られる数字はいかのような規則に従います。

・何も指定しない場合は、0,1,2の順番で割り振られます。
・途中で、数字を指定した場合は、それより後ろの数字は、指定された数字を基準として、数字が順番に割り振られます。
・かぶった数字があった場合、後ろに書かれた方が優先されます(イメージとしては上書きされる感じ)

列挙子に対応する数字が知りたい場合は(int)などの明示的なキャストを使用すればわかります。

ソースコード(数字の割り当てを省略した場合)

実行結果

Blueに対応する数値は0
Yellowに対応する数値は1
Redに対応する数値は2
Whiteに対応する数値は3
Blackに対応する数値は4

ソースコード(途中で数字を指定した場合)

実行結果

Blueに対応する数値は0
Yellowに対応する数値は1
2に対応する数値は2
3に対応する数値は3
4に対応する数値は4
Redに対応する数値は5
Whiteに対応する数値は6
Blackに対応する数値は7

ソースコード(かぶった数字があった場合)

実行結果

Redに対応する数値は0
Whiteに対応する数値は1
Blackに対応する数値は2

ソースコード(int型以外のデータ型を使用した場合。今回はlong型)

実行結果

Blueに対応する数値は-2
Yellowに対応する数値は-1
Redに対応する数値は0
Whiteに対応する数値は1
Blackに対応する数値は2

~プログラミングを勉強してみませんか?~

TechAcademy [テックアカデミー] 無料の体験講座が用意されているので、気軽に体験できます。

※私(サイト主)も無料体験講座を実際に受けてみました(→感想)

     

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)