2009-07-02 10 views
13

Qualcuno potrebbe dirmi il significato di "effetto collaterale" nella riga seguente?Effetto collaterale - cos'è questo?

Se si chiama una funzione EL che non restituisce nulla, la si chiama solo per i suoi effetti collaterali.

risposta

9

Questo significa che non stai chiamando una funzione di "vero", 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. le due chiamate di funzione sono indipendenti e possono essere eseguite in parallelo.

veda la voce di Wikipedia su pure functions per ulteriori dettagli.

+0

"Tale funzione restituisce sempre un valore, che è totalmente deciso dai suoi parametri di input." Questo davvero riassume. E un grande punto sulla programmazione funzionale. Lo esamineremo. –

33

Un effetto collaterale è tutto ciò che un metodo non oltre computing e restituire un valore. Qualsiasi modifica dei valori dei campi di istanza o classe è un effetto collaterale, come il disegnare qualcosa sullo schermo, scrivere su un file o una connessione di rete.

A rigor di termini, una "funzione" è definito come non avere effetti collaterali - che è il motivo per cui Java utilizza la parola "metodo", invece. 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'oggetto.

+5

+1 Buona descrizione degli effetti collaterali. Ma - non è questo il motivo per cui Java usa invece la parola "metodo".Non è per un buon PR, è che il "metodo" è la terminologia all'interno di OO, ben prima che Java esistesse. –

+5

Sospetto che il "metodo" come terminologia OO sia stato coniato proprio perché l'essenza di OO è l'incapsulamento di dati con funzioni che modificano i dati e quindi non sono realmente funzioni. –

3

Un effetto collaterale si ha quando una chiamata al metodo cambia lo stato di una classe. Quindi

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 si pensa di un programma, si può pensare ad esso come istruzioni + stato + ingresso. Quindi se il dominio di un programma è l'intervallo di tutti i possibili stati di input * e il programma ha effetti collaterali, è possibile 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 classe 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.

+0

Un effetto collaterale può essere altro che modificare uno stato di classe, come descritto sopra. – DJClayworth

2

Diamo manipolare il codice di cui sopra un po 'per far capire a confronto.

public class SideEffectClass{ 

    private int state = 0; 

    public doSomething(...){//Does not matter 
     state ++; 
    } 
} 
0

Quando si utilizza un medicinale, gli effetti collaterali sono quelli che sono generalmente effetti indesiderati generalmente 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".

Problemi correlati