C# 7.0 持續追加feature,撰寫的自由度越來越高且狂,第一次看到時驚為天人,手感上有種慢慢偏動態語言的錯覺,
另外,在「模式比對」這一塊,有種遊戲使用「外掛」,看到黑影就可以開槍打中的錯覺,世界已經不是慢慢轉動,是跳耀式進展...
列出常用到的項目提供討論
out 變數
以往要使用out 關鍵字都需要先宣告,現在不用了,直接隨用隨宣告,另外變數型別也可以
使用 var ,讓設計時期還不確定轉型時很方便,如下所示
以上看出節省不必要的宣告定義
更多運算式主體成員
在C# 6.0 針對「唯獨屬性」或「方法」,且為單一陳述示可以使用運算示主體,現在更擴大到建構式、解構式、
get、set 等等...,支援度更全面
以上可看出彈性加大
數值常值的語法增強功能
為了讓數值設定上更加容易識別,可加上底線「_」作為分隔符號,如下所示
其他 float、double、decimal 同樣適用
二進位也可以
以上可看出,對於數值應用的友善度增加
區域函式
設計函式時有時會延伸需要一些輔助方法來幫助完成任務,但這些輔助方法其實也就只有這個函式會呼叫,其他的不會使用到,
因此區域函式的概念油然生成(以往在寫前端較可能發生的事情,現在也都可以實作出來了);值得注意的是,以往設計程式的
核心是單一職責,且函式盡量短,所以在使用這類實作時,優先考慮具有迭代性質與非同步執行
先看以下範例,其中GetValueAsyne 為匿名函式,主要是處理取值得動作,前段為判斷及
丟出例外,區分出職責
再一個例子,同樣來自官網,判斷檔案路徑是否需要附加分割符號,使用區域函式包裝邏輯
同樣,若非同步函式裡面需要各別執行非同步任務,也適合這個技巧,將參考列上
另一個重點,區域函式某種程度可以使用Lambda 運算式取代
以上可看出試圖對於僅單一參考函式設計的便利性
模式比對
透過關鍵字 is 與 switch 的擴充,達到方便判斷比對並進行邏輯分派的模式;例如 is 關鍵字,可以用來判斷是不是某個
類型(參考型別),若是則回傳 true,現在可以多判斷 stuct 類型,若陳述式有動態的型別,則可以如下判斷
再來看 switch ,以往被拿來判斷列舉(數值)或字串,現在甚麼都可以判斷,搭配 foreach、when…等等,先來看如何改進上面的例子
以上是不是清爽很多,接著再看綜合型的,如下所示,當你的參數可能是任意型別 object
上面可看出,是一個object 的集合,case 弄得非常豐富,但由於最終是要回傳 int 出去,故還是有例外的判斷。
此功能對於非繼承階層關聯之不同變數和類型的控制流程很有幫助,控制上可做到高內聚或案例釐清
Tuple
實務上目前確實較少使用,除了較明確一組對應的存在的數值,例如:經緯度;一次回傳一組值,且不能是自訂方法,如下所示
詳細介紹可參考
相關參考
沒有留言:
張貼留言