Я знаю, что obj.func1().func2()
это называется метод цепочки, но что такое технический термин для:
func1(func2(), func3());
Где возврат функции используется в качестве аргумента для другой.
terminology
Женька
источник
источник
obj.func1().func2() is called method chaining
- Исправление: это называется крушение поезда.obj.func1()
всегда возвращаете объект, который имеетfunc2()
функцию-член.Ответы:
Я не думаю, что это функциональная композиция. Составление функций означает получение двух или более функций и превращение их в новую функцию, как
f . g . h
в Haskell. Обратите внимание, что в этот момент функция не вызывается.Лично я бы
func1(func2(), func3())
назвал такие конструкции как «вызовы вложенных функций».источник
f(g())
сделать, это вызватьf()
выражение для первого аргумента, и так случилось, что вызов функцииg()
квалифицируется как выражение. Но если для него должно быть название, оно настолько близко, насколько это возможно.В математике это называется композицией функций . Я не думаю, что слышал термин, применяемый к программированию. Это может быть связано с тем, что использование по большей части избегается по нескольким причинам. Это может привести к странным ошибкам, когда функции имеют побочные эффекты, поскольку компиляторы могут свободно оценивать func3 перед func2. Отладку сложнее, потому что вы не можете установить контрольные точки или распечатать промежуточные результаты, и большинству людей просто становится труднее читать.
источник
printf("%d %d\n", strlen(a), strlen(b));
а не использовать промежуточные переменные.func1(func2(func3(x)))
. Или технически, это относится к функциям сами: еслиg(x) = f1(f2(f3(x)))
, тоg
( неg(x)
) является композициейf1
,f2
иf3
. Хотя я мог видеть способ, которым вы могли бы назвать структуру в вопросе «композиция функций», мне кажется, что это весьма необычное использование термина в математическом смысле.Как указывает @Karl Bielefeldt, в Math это называется композицией функций.
В программировании НЕТ технического термина для этой вещи. И я думаю, что это хорошо, потому что это означает, что операция нормальная и ортогональная .
Ортогональность в языках программирования означает, что вы можете использовать инструкцию / операцию независимо от ее контекста . Например, вы можете вызывать функцию / метод всеми следующими способами, и он будет вести себя одинаково ...
Вы можете прочитать больше об Ортогональности в Программировании в Википедии , и есть вопрос по StackOverflow по этому вопросу.
источник
Я действительно не очень хорош с терминами, но я только что прочитал статью несколько дней назад, в которой упоминался термин функции высшего порядка , и вот краткое изложение определения в Википедии:
http://en.wikipedia.org/wiki/Higher-order_function
так что в этом случае, так как этот сценарий принимает хотя бы одну функцию в качестве входных данных / параметров, я считаю, что она будет считаться функцией более высокого порядка.
источник
func1(func2, func3)
. Обратите внимание на отсутствие круглых скобок.