В математике сложение двух функций можно считать операцией в пространстве функций. Результатом является другая функция.
Я могу смоделировать это, сделав функции абстрактным классом и реализовав для него все соответствующие операторы. Объекту этого класса можно присвоить базовые функции (например, константу), а операторы можно использовать для построения более сложных функций. Эти объекты могут быть, например, оценены или дифференцированы
Как правильно назвать такой абстрактный класс? Очевидно, что функция - вполне адекватный термин в математическом смысле, но неоднозначный в программировании.
Я смутно помню, что кто-то называл его functor, но исследование этого термина привело к чему-то другому.
void
функции (т. е. унарной функции, которая не возвращает значения), java.util.function.Supplier для нулевой функции, java.util .function.Predicate для булевой функции, а также разной арности, например java.util.function.BiFunction для бинарной функции, java.util.function.BiConsumer для бинарной void
функции (т.е. бинарная функция, которая не возвращает значения), java.util.function.BiPredicate для двоичной логической функции, а также типы функций для примитивов, которые не могут быть абстрагированы дженериками, например java.util.function.DoubleToIntFunction или java.util.function.DoubleToLongFunction.scala.FunctionN
, где N — арность функции, например scala.Function0 , scala.Function1 , scala.Function2 и т. д.void
-ness», поэтому имеет два типа функций. Он вызывает void
функции System.Action и не-void
функции System.Func.Я смутно помню, как кто-то называл это функтором, но исследование этого термина привело к чему-то другому.
Помните, что слово означает только то, что человек, использующий это слово, хочет, чтобы оно означало. Ни больше ни меньше.
В данном конкретном случае есть по крайней мере три разных значения в трех разных контекстах, о которых я знаю:
operator()
, то есть любой объект, который можно вызвать так, как если бы он был функцией. Хотя это почти исключительно использование термина C++, это также то, как этот термин используется в некоторых других сообществах языков программирования. Как ни странно, это включает в себя сообщества, которые также используют термин в первом смысле, поэтому вам действительно нужно смотреть на каждый отдельный проект и каждого отдельного человека, как они используют этот термин.Вкратце: вы можете называть это как хотите, если вы определяете, что имеете в виду.