Sono nuovo di Java 8, mi sono imbattuto in Consumer java doc e dice: "Il consumatore dovrebbe funzionare tramite effetti collaterali". Qualcuno potrebbe spiegare perché è stato detto così?Java 8 Consumer ed effetti collaterali
risposta
In base allo Consumer
javadoc, un consumatore deve essere dichiarato con un metodo con la firma void accept(T)
. Di conseguenza, il metodo non può restituire un valore. Se non avesse un effetto collaterale, non avrebbe alcuna possibilità di eseguire alcun effetto.
Grazie. Ho capito il tuo punto. – user6348242
La maggior parte delle interfacce funzionali è pensata per essere proprio quella - funzionale interfacce, che significa in sostanza che accettano un input, eseguono alcuni calcoli e restituiscono un output. Non dovrebbero modificare alcun stato. Consumer
è l'eccezione perché non restituisce alcun valore; il suo scopo è solo quello di modificare alcuni stati.
dei consumatori ha metodo accept
con la seguente firma
void accept(T t);
Il metodo prende t come input e non restituisce nulla (void), e quindi non è possibile restituire nulla da esso e sostituire il metodo chiama con il valore che restituisce.
Un esempio di un effetto collaterale sarebbe una dichiarazione di stampa,
list.stream.foreach(System.out::println);
foreach prende un consumatore come argomento. Se ci pensi, l'unica cosa utile che potresti fare con un tale metodo è cambiare il mondo (cioè, mutare uno stato).
L'opposto che avrebbe un pure function, una funzione che non mutare qualsiasi stato, ci vuole un input e restituisce qualcosa, per esempio
Function<Integer,Integer> fn = x -> x*x;
fn
qui non ha effetti collaterali (non muta nulla), riceve un numero intero e restituisce pacificamente il suo quadrato.
- 1. C# ottimizzazioni ed effetti collaterali
- 2. Attività LongRunning effetti collaterali?
- 3. Q_UNUSED ha effetti collaterali?
- 4. LD_LIBRARY_PATH effetti collaterali
- 5. Effetti collaterali nelle espressioni generiche
- 6. effetti collaterali su altre risorse
- 7. Le importazioni Has Haskell hanno effetti collaterali?
- 8. Enforcing di effetti collaterali in python
- 9. Effetti collaterali della chiamata Assembly.Load più volte
- 10. Approccio ai setter senza effetti collaterali
- 11. C++: funzione di ottimizzazione senza effetti collaterali
- 12. VLA e effetti collaterali nell'operando sizeof
- 13. Java 8 Lambda ed Eccezioni
- 14. Quali sono gli effetti collaterali dell'utilizzo di EmptyWorkingSet?
- 15. Gli effetti collaterali sono possibili nella pura programmazione funzionale
- 16. Esiste un modo per testare l'unità contro gli effetti collaterali?
- 17. Quali sono gli effetti collaterali della disattivazione dell'ispezione LINT?
- 18. git branch -m ha effetti collaterali per altri sviluppatori?
- 19. Perché un riduttore Redux deve essere privo di effetti collaterali?
- 20. Ci sono effetti collaterali dell'utilizzo di molte funzioni statiche?
- 21. Rimuovere gli elementi in un ciclo for senza effetti collaterali?
- 22. Perché utilizzare i cattivi effetti collaterali nei costruttori JavaScript?
- 23. Come gestire gli effetti collaterali complessi in Redux?
- 24. È possibile ottimizzare le funzioni se presentano effetti collaterali?
- 25. Sccl considera se una funzione ha effetti collaterali durante l'ottimizzazione?
- 26. Le funzioni di test unitario con effetti collaterali?
- 27. Esistono effetti collaterali dell'utilizzo di più file string.xml?
- 28. Può sostenere le operazioni di TF con effetti collaterali?
- 29. Ci sono effetti collaterali di ritorno da una dichiarazione using()?
- 30. Quali effetti collaterali ha la parola "nuovo" in JavaScript?
Se non sei abituato alla programmazione funzionale, quella lingua non significa molto per te. L'idea è che le funzioni "pure" dovrebbero solo leggere dai loro input e scrivere solo sui loro valori di ritorno (quindi non ci saranno effetti collaterali - l'unico effetto dell'esecuzione della funzione è che si ottiene il valore di ritorno.) Funzioni che cambiano qualcosa (modificare una struttura dati, eseguire IO, ecc.), si dice che abbia effetti collaterali. Una funzione senza un valore di ritorno avrebbe avuto effetti collaterali migliori, oppure non sta facendo nulla. –