iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 2
1
自我挑戰組

開發雜記系列 第 4

大家遺忘的enum

  • 分享至 

  • xImage
  •  

前言

先前與朋友討論程式語言的時候,總發現學校似乎特別少提到列舉(enum)的用法,事實上,在實務上這是提高程式可讀性的一個很好的方法。本篇就如何使用enum做一些討論。

經典案例

筆者學生時期曾撰寫貪吃蛇,依稀還記得當年尚未了結何謂enum,於是有了下列定義:

private int direction;  //0:上 1:下 2:左 3:右

然後在移動的function中如下:

public void move()
{
    switch (direction)
    {
        case 0://上
            y++;
            break;
        case 1://下
            y--;
            break;
        case 2://左
            x++;
            break;
        case 3://右
            x--;
            break;
    }
}

為了避免自己混淆,都會在0 1 2 3後面備註這是甚麼的定義。但這只是最簡單的案例。隨著筆者不斷學習,開始寫比較大型的程式的時候,往往定義到後面根本搞不清楚,或者忘記更新,最糟糕的是拜複製/貼上大法所賜,忘記改值,於是陷入DEBUG的深遠。知道知道enum的用法以後,就深深的愛上這個功能。

原理

public enum eGameMode{
    EASY,
    NORMAL,
    HARD,
}

如上程式碼是一個典型的enum定義。實際上,enum經過組譯後會成為uint的型態儲存於記憶體中。而定義好的enum,增加了許多可讀性。這是enum最大的作用!!
另外,C#中enum還可以直接指定值、另設別名(alias)的功能,如下程式碼:

public enum eAction
{
    START = 6,    //直接定義該值等於6
    STOP,         //下一筆則自動被+1 設定為7
    RUN = START,  //RUN 其實和START 一樣也是6。
}

經典案例(改)

筆者利用該功能增加上述經典程式碼的可讀性,如下:

public enum eDirection
{
    UP,
    DOWN,
    LEFT,
    RIGHT,
}
public void move()
{
    switch (direction)
    {
        case eDirection.UP:
            y++;
            break;
        case eDirection.DOWN:
            y--;
            break;
        case eDirection.LEFT:
            x++;
            break;
        case eDirection.RIGHT:
            x--;
            break;
    }
}

後記

事實上,筆者實務上還經常將enum當Flag來使用,詳細的說明將在另外一篇中於各位說明。


上一篇
為甚麼要宣告static
系列文
開發雜記4
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
Oo_花之舞__oO
iT邦新手 1 級 ‧ 2023-04-10 14:38:45

好文章 值得更新

感謝您的不嫌棄~

0
TOM
iT邦新手 5 級 ‧ 2023-07-18 10:32:34

沒有注意過的用法!!謝謝分享

不客氣~ 我也是初心者

我要留言

立即登入留言