Effetto collaterale – cos’è questo?

Qualcuno potrebbe dirmi il significato di “effetto collaterale” nella riga seguente?

Se chiami una funzione EL che non restituisce nulla, la stai chiamando solo per i suoi effetti collaterali.

Un effetto collaterale è qualsiasi cosa che un metodo fa oltre a calcolare e restituire un valore. Qualsiasi modifica dei valori dei campi di istanza o class è un effetto collaterale, come il disegnare qualcosa sullo schermo, scrivere su un file o una connessione di rete.

A rigor di termini, una “funzione” è definita come non avendo effetti collaterali – che è il motivo per cui Java usa invece la parola “metodo”. Una funzione reale senza valore di ritorno sarebbe inutile.

Ovviamente, un metodo che non ha un valore di ritorno deve avere una sorta di effetto collaterale che giustifica la sua esistenza. I metodi Set sono un esempio: l’effetto collaterale sta cambiando lo stato interno dell’object.

Questo significa che non stai chiamando una funzione “vera”, nel senso matematico. Tale funzione restituisce sempre un valore, che è totalmente deciso dai suoi parametri di input. Non c’è “stato” da modificare e non può accadere nient’altro. Ecco perché la programmazione funzionale è interessante dal punto di vista della parallelizzazione; rende più facile dimostrare che ad es. due chiamate di funzione sono indipendenti e possono essere eseguite in parallelo.

Vedi la voce di Wikipedia sulle funzioni pure per ulteriori dettagli.

Un effetto collaterale è quando una chiamata al metodo cambia lo stato di una class. Così

public class SideEffectClass{ private int state = 0; public doSomething(int arg0){ state += arg0; } } 

Qui, doSomething (int arg0) ha l’effetto collaterale di cambiare la variabile di stato.

Quando pensi a un programma, puoi considerarlo come istruzioni + stato + input. Quindi se il dominio di un programma è l’intervallo di tutti i possibili stati di input * e il programma ha effetti collaterali, è ansible vedere che il codominio di possibili risultati per l’applicazione può crescere in modo esplosivo, con l’aumento del numero di effetti collaterali. Ciò rende i possibili stati per il programma di grandi dimensioni, il che porta a test complicati. Il paradigma di programmazione funzionale è progettato per eliminare gli effetti collaterali. Rendendo le funzioni di cittadini di prima class e rendendo tutte le dichiarazioni una programmazione funzionale immutabile previene gli effetti collaterali, il che rende la programmazione funzionale brillante nell’elaborazione parallela, poiché i problemi di sincronizzazione sono ridotti.

Analizziamo un po ‘il codice sopra un po’ per renderlo più chiaro a confronto.

 public class SideEffectClass{ private int state = 0; public doSomething(...){//Does not matter state ++; } } 

Quando si utilizza un farmaco, gli effetti collaterali sono quelli che sono in genere effetti collaterali indesiderati. Lo scopo principale di usarlo è ottenere il suo effetto “richiesto”. Qui, quando guardiamo all’angolo delle funzioni, generalmente quando le chiami ottieni un valore calcolato e l’uso. Ci sono altre funzioni che modificano anche alcuni valori durante il calcolo del valore “richiesto”, quindi qui “la modifica di alcuni valori” è un effetto collaterale. Nella descrizione della frase, se una funzione non restituisce nulla, viene utilizzata solo per i suoi effetti collaterali, quindi qui gli effetti collaterali sono “la modifica di alcuni valori”.