6.1 泛型高阶函数

728 篇文章 1 订阅
48 篇文章 0 订阅

6.1 泛型高阶函数

 

    高阶函数是写泛型函数代码的一种方法,这意味着,相同的代码可重复使用于许多类似但不同的目的。这是现代编程的一个关键,因为,它允许我们写更少的代码行,通过分解出计算的共同部分。

 

在函数式编程和面向对象中的泛型代码

 

    当编写泛型代码时,通常要对我们所获得的值执行某个操作,但是,由于代码应该是泛型的,我们不想太多地限制值的类型,想要允许代码进一步的扩展。

    使用 OOP 初步(但不是总是最好的)解决这个问题,是声明一个接口。分配给方法的实际值将具有接口所需的所有操作,因此,在这个值 上,执行所需操作是可能的。在 C# 中的一个小例子,看起来可能像这样:

 

interface ITestAndFormat {
  bool Test();
  string Format();
}
void CondPrint(ITestAndFormat tf) {
  if (tf.Test()) Console.WriteLine(tf.Format());
}

 

    在函数编程中,常规做法是使用泛型方法,使用类型参数,并能够处理任何类型。然而,我们不知道什么操作能够在这个值上执行,因为,类型参数可以由任何实际的类型替代。其结果是,函数语言使用不同的方法来指定操作:它们传递为处理值的函数,作为额外的参数值。前面的示例,在 C# 中的函数版本如下所示:

 

void CondPrint(T value, Func test, Func format) {
  if (test(value)) Console.WriteLine(format(value));
}

 

    对于少量的函数,这是一种非常有效的方法,因为,我们不需要事先声明接口。对于更复杂的处理函数,仍然可以使用接口,我们将在第 9 章中看到。此外,调用函数更容易,因为,能够使用 lambda 函数实现操作。正如我们将在第 6.6 节中看到,在 F# 中,由于使用类型推断,写这样的代码将大大简化。

 

    高阶函数对函数编程来说非常重要,很快,我们将会看到,它们如何被用于处理几种函数值。像 CondPrint 方法,从侧边栏"在函数式编程和面向对象中的泛型代码",对我们来说很重要,因此,让我们看看在 F# 中,如何能够实现同样的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值