Java8: perché due metodi di composizione: e poi e componi?

4

Essendo un principiante in java8 e nella programmazione funzionale, penso che mi manchi qualcosa durante la lettura della composizione delle funzioni poiché non riesco a trovare una ragione per cui esistono due metodi che lo fanno, andThen e compose .

Poiché f.andThen(g) è esattamente uguale a g.compose(f) , perché sono entrambi necessari, in quali casi utilizzare uno di essi è migliore dell'altro?

    
posta Ioanna 07.02.2017 - 11:33
fonte

2 risposte

6

compose è un'operazione tradizionale. Il suo ordine è stato deciso dai matematici. Tuttavia, come molte cose originariamente decise dai matematici, l'ordine non è una convenzione molto conveniente per i programmatori. Includiamo comunque l'operazione perché la programmazione funzionale ha forti legami con la matematica.

In lingue come Haskell, hai solo l'operatore di composizione, quindi devi leggere e scrivere tutto indietro, come:

filter even . concat . filter ((> 2) . length)

Il filtro per la lunghezza maggiore di 2 viene visualizzato per primo, quindi concat , quindi il filtro per i numeri pari. Ci si abitua a questo, ma è ancora fastidioso, quindi altri linguaggi creano operatori di composizione come andThen che consentono di scrivere una funzione composta nell'ordine in cui viene eseguita. Chiunque potrebbe facilmente aggiungere un tale operatore al proprio programma anche in Haskell, del resto, non sarebbe più un idioma di Haskell.

Sentiti libero di usare quello che ti rende più facile la traduzione dal tuo dominio.

    
risposta data 07.02.2017 - 15:02
fonte
1

= v = C'è anche un'interfaccia BiFunction che fa per due argomenti ciò che Function fa per uno. Questa interfaccia non ha compose perché non funziona su due argomenti, ma ha andThen . Quindi un vantaggio di Function#andThen è la coerenza con BiFunction .

    
risposta data 25.04.2017 - 03:39
fonte

Leggi altre domande sui tag