麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

【重構(gòu)學(xué)習(xí)】08條件表達(dá)式的重構(gòu)

2019-11-14 13:34:32
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

所謂條件表達(dá)式,就是分支語(yǔ)句,去掉分支語(yǔ)句咯

1、分解條件表達(dá)式

修改點(diǎn):你有一個(gè)復(fù)雜的條件語(yǔ)句(就是if else語(yǔ)句)

做法:將條件表達(dá)式的三個(gè)部分分別提煉出獨(dú)立函數(shù)

            if (A部分)            {                B部分;            }            else {                C部分;            }    

這三個(gè)部分都提煉成函數(shù)就好了。

2、合并條件表達(dá)式

修改點(diǎn):你有一系列測(cè)試,都得到相同結(jié)果

做法:將這些測(cè)試合并成一個(gè)條件表達(dá)式,并將這個(gè)表達(dá)式提煉成一個(gè)獨(dú)立函數(shù)

3、合并重復(fù)的條件片段

修改點(diǎn):在條件表達(dá)式的每個(gè)分支上有著相同一段代碼

做法:將這段重復(fù)代碼搬移到條件表達(dá)式之外

4、移除控制標(biāo)記

修改點(diǎn):在一系列布爾表達(dá)式中,某個(gè)變量帶有“控制標(biāo)記”(control flag)的作用。

做法:以break語(yǔ)句或return語(yǔ)句取代控制標(biāo)記

            bool isILoveYou=true;            int[] loveNum=new int[100];            for (int i=0; i < 100; i++) {                if (isILoveYou) {                    if (某種原因) {                        isILoveYou = false;                    }                    Console.WriteLine(loveNum[i]);                }            }        

而isILoveYou就是控制標(biāo)記,所以可以用continue,break,return這類跳出語(yǔ)句去移除控制標(biāo)記

5、以衛(wèi)語(yǔ)句取代嵌套條件表達(dá)式

修改點(diǎn):函數(shù)中的條件邏輯使人難以看清正常的執(zhí)行路徑

做法:使用衛(wèi)語(yǔ)句表現(xiàn)所有情況。

如果某個(gè)條件極其罕見,就應(yīng)該單獨(dú)檢查該條件,并在該條件為真時(shí)立刻從函數(shù)中返回,這樣的語(yǔ)句被稱為“衛(wèi)語(yǔ)句”。

6、以多態(tài)取代條件表達(dá)式

修改點(diǎn):你手上有個(gè)條件表達(dá)式,它根據(jù)對(duì)象類型的不同而選擇不同的行為

做法:將這個(gè)條件表達(dá)式的每個(gè)分支放進(jìn)一個(gè)子類內(nèi)的覆蓋函數(shù)中,然后將原始函數(shù)聲明為抽象函數(shù)。

如果你搞不清楚的話,你可以看一看我在 7、數(shù)據(jù)的重構(gòu) 里面的第14點(diǎn)的代碼,也許你會(huì)更清楚一點(diǎn)。

7、引入NULL對(duì)象

修改點(diǎn):你需要再三檢查某對(duì)象是否為NULL

做法:將NULL值替換為null對(duì)象

用了NULL值的代碼:

class PRogram    {        static void Main(string[] args)        {            var roomList = new List<Room>();            roomList.Add(new Room("低級(jí)房",new People("A先生")));            roomList.Add(new Room("高級(jí)房"));            foreach (var room in roomList) {                if (room.Master != null) {                    Console.WriteLine(room.Master.Name);                }            }            Console.ReadKey();        }    }    public class Room {        public Room(string roomName,People people=null)        {            this.RoomName = roomName;            this.Master = people;        }        public string RoomName { get; set; }        public People Master { get; set; }    }    public class People    {        public People(string name) {            this.Name = name;        }        public string Name { get; set; }    }

改為

class Program    {        static void Main(string[] args)        {            var roomList = new List<Room>();            roomList.Add(new Room("低級(jí)房",new People("A先生")));            roomList.Add(new Room("高級(jí)房"));            foreach (var room in roomList) {                Console.WriteLine(room.RoomName + ":" + room.Master.Name);            }            Console.ReadKey();        }    }    public class Room {        public Room(string roomName,People people=null)        {            this.RoomName = roomName;            this.Master = people;        }        public string RoomName { get; set; }        public People Master {             get{                return  _master==null?new NullPeople():_master;            }            set {                _master = value;            }        }        People _master;    }    public class People    {        public People()        {        }        public People(string name) {            this.Name = name;        }        public virtual string Name { get; set; }        public virtual bool IsNULL()        {            return false;        }        public static People CreateNullPeople()        {            return new NullPeople();        }    }    public class NullPeople:People{        public NullPeople():base() {                 }        public override bool IsNULL(){            return true;        }        public override string Name        {            get            {                return "無(wú)人";            }        }    }

在這里不繼承people可能更好一點(diǎn),都繼承一個(gè)自定義的接口IsNULLPeople,代碼更好看一點(diǎn)。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 激情综合婷婷久久 | 2级毛片 | 国产影视 | 成人视屏在线观看 | 欧美精品一级 | 亚洲国产成人久久一区www妖精 | 成年免费视频黄网站在线观看 | 久久久精品视频国产 | 国产高潮失禁喷水爽到抽搐视频 | 日本黄色a视频 | 精品一区二区免费视频视频 | 日韩高清影视 | 欧美人的天堂一区二区三区 | 天海翼四虎精品正在播放 | 在线a毛片免费视频观看 | 一级毛片免费高清视频 | 久久精精品 | 羞羞答答视频 | 欧美成人午夜一区二区三区 | 在线亚洲观看 | 午夜男人在线观看 | av成人免费在线观看 | 国产永久免费观看 | 久久久无码精品亚洲日韩按摩 | 一级黄色影院 | 粉嫩蜜桃麻豆免费大片 | 亚洲成人网一区 | 日日操操 | 亚州精品在线视频 | 激情小说另类 | 日韩精品网站在线观看 | 欧美日韩色 | 精品亚洲午夜久久久久91 | 欧美a视频在线观看 | a黄毛片 | 久久久久北条麻妃免费看 | 亚洲国产女同久久 | 久久久视频免费观看 | 亚洲第一色婷婷 | 深夜视频福利 | 九九热精品在线 |