java泛型,6.1 泛型高阶函数

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# 中,如何能够实现同样的功能。
Tags:  泛型编程与stl 泛型方法 什么是泛型 泛型编程 java泛型

延伸阅读

最新评论

发表评论