Enum Switch

 

在上一篇,和大家介紹了enum列舉,而enum在應用上常和switch做搭配。

 

switch是一個用來取代if else的方法,寫程式可以不會用switch只用if else,這結果其實是相同的,但如果不使用switch,只會使用if else,這樣會造成程式變得很長,所以還是應該要會使用switch比較好。這篇文章的重點不在介紹怎麼使用switch,如果對switch還不熟悉的朋友可以自己上網學習甚麼是switch

switch也可以不需要和enum搭配使用,結果其實是一樣的,但是好的程式要讓人容易理解和好維護,使用enum的目的就是可以讓程式較好理解,讓程式較好維護,才不會程式一時之間看不懂,還要再去看衍生的程式。

舉個例子會比較好理解。

今天我要做一個投注系統,依照使用者的輸入來增加使用者的下注金額,程式如下:

//現在下注的金額

int mybet = 0;

 

//賭注金額增減

private void BetMoney(int money)

{

            //依照不同的狀況,增加玩家的下注金額

            switch(money)

            {

case 0:

                    mybet = 0;

                    break;

                case 1:

                    mybet += 1;

                    break;

                case 2:

                    mybet += 5;

                    break;

                case 3:

                    mybet += 10;

                    break;               

                case 4:

                    mybet *= 2;

                    break;

            }                    

}

 

這裡使用switch,從money的數字是多少,來決定玩家的下注金額增加多少,或是金額歸零,然而這樣子做有缺點,就是程式很不好理解,開發的人知道程式在寫甚麼,但如果另一個程式設計師看到就不知道在寫甚麼,還要再花費時間看懂程式。如果這裡的money改成使用列舉enum的話那程式就變得簡單易讀了,下面把money改成使用列舉enum

//列舉不同的賭注金額

enum betmoney { clear, bet1, bet5, bet10, betdouble }

 

//現在下注的金額

int mybet = 0;

 

//賭注金額

private void BetMoney(betmoney money)

{

            switch(money)

            {

                case betmoney.bet1:

                    mybet += 1;

                    break;

                case betmoney.bet5:

                    mybet += 5;

                    break;

                case betmoney.bet10:

                    mybet += 10;

                    break;

                case betmoney.clear:

                    mybet = 0;

                    break;

                case betmoney.betdouble:

                    mybet *= 2;

                    break;

            }                      

}

 

跟前面的程式比較起來,這樣子寫看起來就非常容易理解,本來都是寫數字,這樣的程式看都看不懂,而這裡改成betmoney.bet1就表示下注1元,betmoney.clear表示下注的金額歸零,另外betmoney.betdouble表示下注金額乘以2。這樣子的程式就非常好理解,而且也比較能夠顯示出一個程式設計師的程度,一個有經驗的程式設計師就會善用enum列舉,沒經驗的程式設計師不會使用enum列舉,出來的結果其實也都一樣,但是這樣一看就知道這個人沒甚麼程式設計經驗,程式很不好懂也不好維護,當然更沒有經驗的程式設計師連switch都不會用,程式就更難維護了。

 

我舉例的這個程式為視窗程式,使用者透過按鈕來增減下注金額,按下按鈕後下注金額就會改變,最後附上完整程式碼以及程式碼連結給大家。

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

 

namespace public_enum_sample

{

    public partial class Form1 : Form

    {

        //現在下注的金額

        int mybet =0;

 

        //列舉不同的賭注金額

        enum betmoney { clear, bet1, bet5, bet10, betdouble }

 

        public Form1()

        {

            InitializeComponent();

        }

 

        //賭注金額增減

        private void BetMoney(betmoney money)

        {

            //依照不同的狀況,增加玩家的下注金額

            switch(money)

            {

                case betmoney.bet1:

                    mybet += 1;

                    break;

                case betmoney.bet5:

                    mybet += 5;

                    break;

                case betmoney.bet10:

                    mybet += 10;

                    break;

                case betmoney.clear:

                    mybet = 0;

                    break;

                case betmoney.betdouble:

                    mybet *= 2;

                    break;

            }         

            //結果顯示於textbox

            lbResult.Text = mybet.ToString();

        }

 

        //按下1

        private void money1_Click(object sender, EventArgs e)

        {

            BetMoney(betmoney.bet1);

        }

 

        //按下5

        private void money5_Click(object sender, EventArgs e)

        {

            BetMoney(betmoney.bet5);

        }

 

        //按下10

        private void money10_Click(object sender, EventArgs e)

        {

            BetMoney(betmoney.bet10);

        }

 

        //按下reset

        private void money0_Click(object sender, EventArgs e)

        {

            BetMoney(0);

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            //剛開始下注金額顯示為0

            lbResult.Text = "0";

        }

 

        //按下double

        private void moneyDouble_Click(object sender, EventArgs e)

        {

            BetMoney(betmoney.betdouble);

        }

    }

}

 

下注系統程式畫面

 

程式

 

相關文章

[C#]Eum列舉

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 波羅、希夏普2020 的頭像
    波羅、希夏普2020

    希夏普2020的程式天地

    波羅、希夏普2020 發表在 痞客邦 留言(0) 人氣()