2012年10月6日 星期六

利用 泛型委派 Action 與 Func 減少不必要的 公用方法

基礎知識 請拜 小朱大神人文 [.NET] 由委派演進到 Lambda Expression
http://www.dotblogs.com.tw/regionbbs/archive/2012/08/15/from.delegate.to.lambda.aspx

假如剋戶要的效果像這樣 - 一個偵測句子有無特定關鍵字的文字小遊戲 (雖然真實的剋戶要求絕無可能這麼簡單)

新到不能再新的初心者寫出這段吐槽到不行的CODE

身為一個職業的嫻熟PG,絕不允許重複代碼,於是大刀砍~

抽抽抽~重複的地方全抽出來寫個公用方法,一片蛋糕

但是有時候並不是很好(雖然自我感覺良好),因為如果程式碼重複的代碼僅限於一個方法之中

如果抽成公用方法方法的話,這將是永遠只有同一叫用來源的方法

這不打緊,如果方法的順序排的很亂,移至定義跳來跳去還沒看CODE就先轉暈了

這還不包括封裝的方式不夠好,不小心被誤用,由其他的來源叫用這個公用方法



訴求很簡單:有沒有辦法(限制)在一個方法之中,把重複的代碼包起來執行

答案很簡單,使用委派就好了

但是直接使用自訂的委派物件不是個好作法,如上所言

不會在別的地方用到,所以特地宣告一個委派物件有點多餘,甚至有可能占用掉一個別人可能需要的命名



我想得到的 .NET 不太可能沒想到

神人文:http://www.dotblogs.com.tw/atowngit/archive/2011/02/23/21523.aspx

參拜完神人文章之後就知道有現成的委派物件可以直接使用。



利用Func我將3個小方法封裝在 doWork 之中,絕無可能被其他方法誤用

而且泛型委派可以直接取得同層的變數

這個案例其實適合使用Func,但是懶得再寫一個Action的案例所以直接硬改

因此 lineMaker 為了判斷來源 多了一個 switch

實際上要用 Action 還是 Func 應該遵照需不需要有回傳值來做決定

沒有留言:

張貼留言