Convenzione di denominazione per le funzioni di ordine superiore? [chiuso]

12

Esiste una convenzione di denominazione per le funzioni di ordine superiore? Cioè, funzioni che restituiscono altre funzioni.

Un esempio in 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]

Ho avuto la tendenza a scriverlo come sopra: cioè, l'ottimizzazione per la leggibilità al punto di chiamata (avrei letto le ultime righe sopra come "filtra l'array per ottenere elementi divisibili solo per 5"), tuttavia al definizione lontana dal contesto in cui è usata, non è così facile capire cosa questa funzione fa dal suo nome.

    
posta nickf 20.11.2013 - 18:28
fonte

3 risposte

14

No, non penso che tu abbia bisogno di una convenzione di denominazione speciale per indicare che stai restituendo una funzione. Come possiamo vedere dalle lingue in cui le funzioni sono curried , restituire una funzione è essenzialmente la stessa di avere una funzione con più argomenti. per esempio. c'è poca differenza tra onlyDivisibleBy(3)(6) e onlyDivisibleBy(3,6)

Vorrei cambiare il nome da onlyDivisibleBy a isDivisibleBy anche se penso che is sia un modo più comune per indicare un predicato e onlyDivisibleBy(3)(6) sembra strano restituire true dato che 6 è chiaramente divisibile entro 2

    
risposta data 20.11.2013 - 18:53
fonte
5

Nei linguaggi funzionali strongmente tipizzati, è ovvio dalla firma della funzione che cos'è una funzione di ordine superiore e ciò che non lo è, quindi non c'è semplicemente bisogno.

In altre lingue, non mi sono mai imbattuto in una tale convenzione di denominazione e non riesco a pensarne una che non sia semplicemente ingombrante. Meglio concentrarsi sulle funzioni di denominazione più che su un sovraccarico di nomi del genere, credo.

    
risposta data 20.11.2013 - 18:46
fonte
4

No, e non dovresti usare nessuno.

Perché?

Perché sarebbe una sorta di notazione ungherese . L'idea è esattamente che le funzioni passate alle funzioni di ordine superiore sono solo un tipo di variabili. Quindi trattali così.

    
risposta data 20.11.2013 - 18:49
fonte