列挙型の使い方とマジックナンバーの防ぎ方(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

~ギャンブルに絶対儲かる必勝法があるのだろうか?~

私(サイト主)はこの疑問に対して非常に興味を持ち、プログラミングで検証してみました。

このサイトを応援してもいいかなと思う人はぜひとも購入を検討してみてください。

ギャンブルの必勝法が本当に儲かるかプログラミングで検証してみた

     

コメントを残す

*

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