表驅動法,讓你體驗什么才是代碼的精髓,高靈活度,高效率,更簡單,體驗代碼的魅力!(適合新手入門)
大大贊揚一番,現在我們一起體驗代碼之優雅。
先來看看代碼,你有寫過類似下面的這些代碼嗎?
片段:
1 if (('a' >= inputChar && inputChar <= 'z')||('A'>=inputChar&&inputChar<='Z')) 2 { 3 ..... 4 } 5 else if ((inputChar == ' ') || (inputChar == ',') || (inputChar == ';') || (inputChar == ':') || (inputChar == '?')) 6 { 7 .... 8 }
冗長的邏輯判斷,如果你是在維護代碼,這些是不是讓你很難忍受?你不得不花大量時間去閱讀前作者的代碼。
好,現在有一個問題:
假設你在寫一個計算醫療保險費率的程序,這些費率隨着年齡、性別、婚姻狀況、以及吸煙與否的不同情況而變化的。你寫出的代碼會不會是這樣?
例:
1 if (gender == Gender.Female) 2 { 3 if (maritalStatus == MaritalStatus.Single)//是否單身 4 { 5 if (smokingStatus == SmokingStatus.NonSmoking) 6 { 7 if (age < 18) 8 { 9 rate = 200.00; 10 } 11 else if (age < 19) 12 { 13 rate = 250.00; 14 } 15 ... 16 else if (age < 65) { 17 rate = 450.00 18 } 19 } 20 else 21 { 22 if (age < 18) 23 { 24 rate = 250.00; 25 } 26 else if (age < 19) 27 { 28 rate = 300.00; 29 } 30 ... 31 else if (age < 65) { 32 rate = 575.00 33 } 34 }//完成單身smokingStatus 35 } 36 else if(maritalStatus == MaritalStatus.Married) 37 { 38 if (smokingStatus == SmokingStatus.NonSmoking) 39 { 40 ... 41 } 42 else 43 { 44 ... 45 }//完成已婚smokingStatus 46 } 47 } 48 .... 49 }
很簡單是不是? 很繁瑣有木有?你能想象,把這個題目做完需要多大的代碼量。
好,現在看看表驅動法的解決這類邏輯控制結構。
首先,我們需要做的是把這些費率存入所有元素索引的數組里面,用簡單形象的描述就是,你需要定義一個類型,像這樣:
1 //定義吸煙狀態 2 3 enum SmokingStatus 4 { 5 Smoking_Firs = 0, 6 Smoking = 0, 7 NonSmoking=1, 8 Smoking_Last = 1 9 } 10 11 //定義已婚狀態 12 13 enum MaritalStatus 14 { 15 Marital_First = 0, 16 Single = 0, 17 Maritied = 1, 18 Marital_Last=1 19 20 }
對,它僅僅是一個枚舉類型,上述只定義了兩個類型, 我們還需要定義一個性別類型,在此就不再重復。
現在數據類型已經定義好了,現在差的就是數據了,數據可以從數據庫查出,也可從文件讀出,那就要看你怎么選擇了,
下面定義一個方法:
1 //返回費率 2 3 private Double Rate(SmokingStatus smoking, MaritalStatus maital, Gender gender, Age age) 4 { 5 Double rate; 6 //... 7 return rate; 8 }
我們現在需要做的,假如保險人的信息是這樣的:18歲,單身,吸煙,女。
就像這樣,優雅的代碼展示:
1 //返回相應的費率 2 3 double rate = Rate(SmokingStatus.Smoking, MaritalStatus.Single, Gender.Female, 18);
一看這句,是不是覺得,很簡單?你能理解他的意思,僅僅從字面上,對,就是這么簡單。
除去了繁瑣的判斷,我們要做的只是要加費率的相應數據,其他的通過Rate處理搞定,什么?費率怎么加?既然是表驅動法,就想想表是什么樣的吧?
這僅僅是表驅動法的一種。歡迎各位指正,一起學習 一起提高!
分享是一種美德~ 再見~~~