我认为 John Stauffer 主要有这个定义。我还要补充一点,您需要能够传递函数。本质上,您需要高阶函数,这意味着您可以轻松地传递函数(尽管传递块就足够了)。
例如,一个非常流行的函数调用是 map。基本上相当于
list is some list of items
OutList is some empty list
foreach item in list
OutList.append(function(item))
return OutList
因此代码表示为 map(function, list)。革命性的概念是功能就是功能。 Javascript 是具有高阶函数的语言的一个很好的例子。基本上,函数可以被视为变量并传递给函数或从函数返回。 C++ 和 C 具有可以类似使用的函数指针。 .NET 委托也可以类似地使用。
那么你可以想出各种很酷的抽象......
你有 AddItemsInList、MultiplyItemsInList 等函数吗?
每个函数接受 (List) 并返回单个结果
您可以创建(注意,许多语言不允许您将+ 作为函数传递,但这似乎是表达概念的最清晰方式)....
AggregateItemsInList(List, combinefunction, StepFunction)
增量函数适用于索引...更好的是使用列表操作(如 next 和 for incTwo next 如果存在)使它们适用于列表...
function incNormal(x) {
return x + 1
}
function incTwo(x) {
return x + 2
}
AggregateItemsInList(List, +, incNormal)
想要完成其他所有项目吗?
AggegateItemsInList(List, +, incTwo)
想要乘法吗?
AggregateItemsInList(List, *, incNormal)
想要将考试成绩加在一起?
function AddScores (studenta, studentb) {
return studenta.score + studentb.score
}
AggregateItemsInList(ListOfStudents, AddScores, incOne)
高阶函数是一个非常强大的抽象。不必为数字、字符串、学生等编写自定义方法。您有一个聚合方法可以遍历任何内容的列表,您只需为每种数据类型创建加法操作。