zoukankan      html  css  js  c++  java
  • VBF BETA 1.5 发布了

    昨天忙了一个晚上,终于发布了新的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 IntegerString= Values(12"Hello World")
    Dim t2 As Tuple(Of LongSingleDate= _
        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中提供更多新酷功能。
  • 相关阅读:
    C#泛型类的简单创建与使用
    线程、委托、lambda运算符的简单示例
    异步编程中使用帮助类来实现Thread.Start()的示例
    C#操作INI配置文件示例
    C#“简单加密文本器”的实现
    Java设计模式之模板模式(Template )
    java提取出一个字符串里面的Double类型数字
    阿里云服务器配置SSL证书成功开启Https(记录趟过的各种坑)
    Gson解决字段为空是报错的问题
    shiro 单点登录原理 实例
  • 原文地址:https://www.cnblogs.com/Ninputer/p/336690.html
Copyright © 2011-2022 走看看