VBF BETA 1.5 發布了

來源:互聯網
上載者:User
昨天忙了一個晚上,終於發布了新的BETA 1.5。叫BETA 1.5而不是BETA2的原因是我覺得這次發布比較倉卒,品質恐怕還到不了叫BETA2的程度。但是這次更新帶來的新特性還是比較多的。下載頁面:
http://sourceforge.net/project/showfiles.php?group_id=148613

首先給不熟悉VBF的人簡單介紹一下VBF:VBF是一個.NET下的函數式編程類庫,提供了建立函數式演算法邏輯的基本架構,還提供了一個使用組合子和高階函數來建立新函數的體系。使用VBF可以實現物件查詢、詞法解析以及順延強制邏輯的許多程式。這個版本提供的新功能主要包括:

1、Nullable的支援和IsNull判定

這次提供了對.NET Framework 2.0中Nullable Type的支援,即支援返回Nullalbe<T>類型的函數子(Functor)使用定義在T上的四則運算或比較子。對C#而言,這是一個非常方便的特性。比如我們有個一System.Collections.Generic.List<int?>類型的列表list1,下面的代碼示範了如何從中查詢到所有小於0或者為空白的項: //C#
//定義一個Identity對象用於查詢
Identity<int?> IdNInt = new Identity<int?>();

List<int?> result = list1.FindAll(IdNInt.IsNull() || IdNInt < 0);

如你所見,現在可以使用捷徑運算子||和&&了,這也是本版本一個新增功能。另一個新增功能:IsNull()返回一個函數用於判斷當前項是否為空白。

2、元組(Tuple)和多元函數支援

現在VBF通過對Tuple的支援,提供了處理二元函數及三元函數的能力。Tuple是一種唯讀結構體,其每個欄位的類型均由型別參數指定。因此使用Tuple,你可以快速建立出滿足你要求的小型結構。 'VB
'示範產生一個Tuple

Dim t1 As Tuple(Of Integer, String) = Values(12, "Hello World")
Dim t2 As Tuple(Of Long, Single, Date) = _
    Values(100L, -58.8, Now())

Values函數自動產生一個相應類型的Tuple,當前Tuple最多支援5個型別參數。Tuple用於類比多元函數的參數表,還可以作為查詢的臨時返回量。

3、屬性訪問文法

這是本版本極其重要的一個功能,有了他,就可以在Id型查詢中訪問被查詢對象的屬性。我們先看一個例子。假設Employee類型有兩個屬性——整數型的Age和字串型的Name。如果我們有一個System.Collections.Generic.List<Employee>類型的列表emplist,現在要找到所有Age大於25的Employee對象,該如何寫呢?VBF提供了獨特的!文法(僅支援VB)和Satisfies滿足條件方法:

'VB
'Employee是一個有Age和Name屬性的類型
'emplist是一個裝有Employee執行個體的List(Of Employee)

'定義Identity對象用於查詢
Dim IdEmp As New Identity(Of Employee)

result = emplist.FindAll(IdEmp!Age.Satisfies(IdInt > 25))

注意!Age文法,它提供了對Age的訪問,但無法得知Age的類型。因此需要在Satisfies函數後面用強型別的IdInt指明要查詢的Age是Integer類型。這條查詢語句可以讀作“尋找Employee,它的Age屬性滿足整數大於25”。這已經是我找到的最具可讀性的寫法。除了Satisfies滿足條件方法,還支援直接取得屬性值的功能。比如我們要的到另一個List(Of String),是剛才那個Employee集合中所有項目Name屬性群組成的集合,可以這樣寫: 'VB
'接上段代碼

Dim names As List(Of String) = _
    emplist.ConvertAll(Of String)(IdEmp!Name.AsType(Of String))

AsType方法表明了你要訪問的屬性的真實類型,這裡不支援任何協變。比如上述文法如果你是用Of Object就會運行錯誤。C#不支援!運算子,我在C#中採用了indexer的文法,即使用方括弧來訪問想要的屬性: //C#
Identity<Employee> IdEmp = new Identity<Employee>();

result = emplist.FindAll(IdEmp["Age"].Satisfies(Identities.IdInt > 25));

4、順延強制

現在VBF的每一個函數子物件(Functor)都支援一個DelayInoke的函數,它能返回一個IDelayInvoke(Of TReturn)的介面。使用DelayInvoke可以延遲函數的真實求值過程,直到真正使用函數傳回值的時候才開始計算。順延強制可以用來實現Command模式以及Undo/Redo功能。

VBF 1.5還提供了許多其它的新功能,比如用於String型函數的IndexOf方法支援、一元正負運算子支援、類型轉換函式支援等等。有興趣的可以直接下載原始碼觀看。很抱歉的是這次時間仍然較緊張,我還是沒有提供文檔,如果發現很難看懂我建議從Functor(Of TArg, TReturn)這個類的虛函數開始看起。希望大家多多提出建議,以便在VBF中提供更多新酷功能。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.