Я думаю, что Джон Штауффер в основном имеет определение. Я также добавил бы, что вы должны иметь возможность передавать функции. По сути, вам нужны функции высокого порядка, то есть вы можете легко передавать функции (хотя передача блоков достаточно хороша).
Например, очень популярный функциональный вызов - карта. Это в основном эквивалентно
list is some list of items
OutList is some empty list
foreach item in list
OutList.append(function(item))
return OutList
, так что код выражается в виде карты (функция, список). Революционная концепция заключается в том, что функция - это функция. Javascript - отличный пример языка с функциями высокого порядка. В основном функции могут рассматриваться как переменные и передаваться в функции или возвращаться из функций. C ++ и C имеют указатели на функции, которые можно использовать аналогично. Делегаты .NET также могут использоваться аналогично.
тогда вы можете подумать о всяких классных абстракциях ...
У вас есть функция AddItemsInList, MultiplyItemsInList и т. Д.?
Каждая функция принимает (Список) и возвращает один результат
Вы могли бы создать (заметьте, многие языки не позволяют передавать +
как функцию, но, кажется, это самый ясный способ выразить концепцию) ....
AggregateItemsInList(List, combinefunction, StepFunction)
Инкрементные функции работают с индексами ... лучше было бы заставить их работать со списком, используя операции со списками, такие как next, и для incTwo next 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)
Функции высокого порядка - очень мощная абстракция. Вместо того, чтобы писать собственные методы для чисел, строк, студентов и т. Д., У вас есть один метод агрегирования, который просматривает список чего угодно, и вам просто нужно создать операцию сложения для каждого типа данных.