c'è un termine per farlo: func1 (func2 (), func3 ());

24

So che obj.func1().func2() è chiamato metodo di concatenamento, ma qual è il termine tecnico per:

func1(func2(), func3());

Dove il ritorno di una funzione è usato come argomento ad un altro.

    
posta zhenka 17.11.2011 - 03:46
fonte

4 risposte

38

Non penso che sia la composizione della funzione. La composizione della funzione significa assumere due o più funzioni e trasformarle in una nuova funzione, come f . g . h in Haskell. Nota che nessuna funzione è chiamata a questo punto.

Personalmente, mi riferisco a costrutti come func1(func2(), func3()) come "chiamate di funzioni annidate".

    
risposta data 17.11.2011 - 08:49
fonte
16

In matematica, si chiama composizione delle funzioni . Non penso di aver sentito il termine applicato alla programmazione, però. Ciò potrebbe essere dovuto al fatto che l'utilizzo è in gran parte evitato per alcune ragioni. Può introdurre strani bug quando le funzioni hanno effetti collaterali, poiché i compilatori sono liberi di valutare func3 prima di func2. È più difficile eseguire il debug perché non è possibile impostare i punti di interruzione o stampare risultati intermedi e la maggior parte delle persone trova semplicemente più difficile leggere.

    
risposta data 17.11.2011 - 05:59
fonte
2

Come punti @Karl Bielefeldt, si chiama composizione della funzione in Math.

Non c'è un termine tecnico per questa cosa nella programmazione. E penso che sia una buona cosa, perché indica che l'operazione è normale e Ortogonale .

L'ortogonalità nei linguaggi di programmazione significa che puoi usare un'istruzione / operazione indipendente dal suo contesto . Ad esempio, puoi chiamare una funzione / metodo in tutti i seguenti modi, e si comporterebbe allo stesso modo ...

f1()(f2(), f3());

x = y + f4();

if ( f5() && !f6() ) doSomething();

f7() = f8() + f9(); // in C++ when a function returns a reference

x = f10() ? f11(f12(f13(x))) : f14();

Puoi leggere di più su Ortogonalità in Programmazione su Wikipedia , e c'è un domanda su StackOverflow su questo.

    
risposta data 17.11.2011 - 05:48
fonte
1

Non sono molto bravo con i termini, ma ho appena letto un articolo di qualche giorno fa che si riferiva al termine Superiore funzioni di ordine , ed ecco un riassunto della definizione per Wikipedia:

link

In mathematics and computer science, higher-order functions, functional forms, or functionals are functions which do at least one of the following:

  • take one or more functions as an input
  • output a function

All other functions are first-order functions. In mathematics higher-order functions are also known as operators or functionals. The derivative in calculus is a common example, since it maps a function to another function.

quindi, in questo caso, poiché tale scenario prende almeno una funzione come input / param, sarebbe considerata una funzione di ordine superiore, credo.

    
risposta data 17.11.2011 - 20:57
fonte

Leggi altre domande sui tag