Іменування конвенції для функцій вищого порядку? [зачинено]


15

Чи існує угода про іменування для функцій вищого порядку? Тобто функції, які повертають інші функції.

Приклад у Javascript:

function onlyDivisibleBy(div) { // <-- higher order function
  return function (n) {
    return n % div === 0;
  }
}

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

arr.filter(onlyDivisibleBy(3)); // [0, 3, 6, 9]
arr.filter(onlyDivisibleBy(5)); // [0, 5]

Я схильний писати це як вище: тобто оптимізувати для розбірливості в точці виклику (я прочитав останні рядки вище як "фільтрувати масив, щоб отримати елементи, що діляться лише на 5"), однак у пункті визначення з контексту, в якому він використовується, не так просто зрозуміти, що ця функція робить від своєї назви.


4
Це дивно, що я завжди розумів термін "функція вищого порядку" означати функцію, яка прийняла іншу функцію як аргумент. Я не кажу, що ви помиляєтесь, я просто вважаю різницю в нашому розумінні цікавою.
Рахіт

6
@Racheet функції, які повертають функції, також вищого порядку. Вони можуть робити і те, і інше.
йогобурс

3
@Racheet, що є хорошим моментом і досить актуальним для цього прикладу: те, що ОП реально реалізує, це часткове застосування. Багато (усі? Не впевнені) використання, де функції повертаються, можна розглядати замість них як часткове застосування. @ nickf: ось більш

Відповіді:


14

Ні, я не думаю, що вам потрібна спеціальна угода про іменування, щоб вказати, що ви повертаєте функцію. Як ми бачимо з мов, де функції викладені , повернення функції по суті те саме, що функція з кількома аргументами. наприклад, різниця між onlyDivisibleBy(3)(6)іonlyDivisibleBy(3,6)

Я б змінив ім'я з onlyDivisibleByна, isDivisibleByхоча, як я вважаю is, це більш поширений спосіб позначення предиката і onlyDivisibleBy(3)(6)здається дивним для повернення, trueвраховуючи, що 6 явно також ділиться на 2


5

У сильно набраних функціональних мовах з підпису функції видно, що є функцією вищого порядку, а що ні, тому просто немає потреби.

Іншими мовами я ніколи не стикався з такою умовою іменування, і не можу придумати той, який би не був просто громіздким. Краще зосередитись на функціях іменування, ніж перевантажувати такі імена, я думаю.


4

Ні, і не слід використовувати жодне.

Чому?

Тому що це була б якась угорська позначення . Ідея полягає саме в тому, що функції, передані функціям вищого порядку, є лише різновидом змінних. Тож ставитесь до них так.


1
Що означає, що угорську нотацію слід уникати будь-якою ціною? Я рекомендую прочитати "Неправильний код виглядати неправильно"
TehShrike

4
Я читав це раніше, і я все ще вважаю, що угорська нотація погана :)
Вільберт

@TehShrike Ваше посилання розірвано.
corvus_192

1
@ corvus_192, мабуть, заблукали в дизайні блогу Джоела! Новий URL , здається, joelonsoftware.com/2005/05/11/making-wrong-code-look-wrong
TehShrike
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.