2009-07-02 10 views
13

¿Podría alguien decirme el significado de "efecto secundario" en la siguiente línea?Side effect - ¿Qué es esto?

Si llama a una función EL que no devuelve nada, entonces la llama solo por sus efectos secundarios.

Respuesta

9

Esto significa que no está llamando a una función "verdadera", en el sentido matemático. Tal función siempre devuelve un valor, que está totalmente decidido por sus parámetros de entrada. No hay un "estado" para modificar, y no puede pasar nada más. Esta es la razón por la cual la programación funcional es interesante desde el punto de vista de la paralelización; hace que sea más fácil demostrar que, p. dos llamadas a funciones son independientes y pueden ejecutarse en paralelo.

Consulte la entrada de Wikipedia en pure functions para obtener más detalles.

+0

"Tal función siempre devuelve un valor, que es totalmente decidido por sus parámetros de entrada". Esto realmente lo resume. Y un gran punto en la programación funcional. Lo investigaré. –

33

Un efecto secundario es todo lo que hace un método además de calcular y devolver un valor. Cualquier cambio de instancia o valores de campo de clase es un efecto secundario, como lo es dibujar algo en la pantalla, escribir en un archivo o una conexión de red.

Estrictamente hablando, una "función" se define como no tener efectos secundarios, por lo que Java usa la palabra "método" en su lugar. Una función real sin valor de retorno no tendría sentido.

Obviamente, un método que no tiene un valor de retorno debe tener algún tipo de efecto secundario que justifique su existencia. Los métodos set son un ejemplo: el efecto secundario es cambiar el estado interno del objeto.

+5

+1 Buena descripción de los efectos secundarios. Pero - no es por eso que Java usa la palabra "método" en su lugar.No es para buenas relaciones públicas, es que el "método" es la terminología dentro de OO, mucho antes de que Java existiera. –

+5

Sospecho que el "método" como una terminología OO fue acuñado precisamente porque la esencia de OO es la encapsulación de datos con funciones que cambian los datos y, por lo tanto, no son realmente funciones. –

3

Un efecto secundario es cuando una llamada a un método cambia el estado de una clase. Entonces

public class SideEffectClass{ 

    private int state = 0; 


    public doSomething(int arg0){ 
     state += arg0; 
    } 
} 

Aquí, doSomething (int arg0) tiene el efecto secundario de cambiar la variable de estado.

Cuando piense en un programa, puede considerarlo como instrucciones + estado + entrada. Entonces, si el dominio de un programa es el rango de todos los estados de entrada * posibles, y el programa tiene efectos secundarios, puede ver que el codominio de posibles resultados para la aplicación puede crecer explosivamente a medida que aumenta el número de efectos secundarios. Esto hace que los estados posibles para el programa sean grandes, lo que lleva a pruebas complicadas. El paradigma de programación funcional está diseñado para eliminar los efectos secundarios. Al hacer las funciones de ciudadanos de primera clase y al hacer todas las declaraciones, la programación funcional inmutable evita los efectos secundarios, lo que hace que la programación funcional brille en el procesamiento paralelo, a medida que se reducen los problemas de sincronización.

+0

Un efecto secundario puede ser otras cosas que cambiar un estado de clase, como se describe anteriormente. – DJClayworth

2

Vamos a manipular un poco el código dado un poco para que quede claro en comparación.

public class SideEffectClass{ 

    private int state = 0; 

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

Cuando usa un medicamento, sus efectos secundarios son aquellos que generalmente son efectos no deseados. El objetivo principal de usarlo es obtener su efecto "exigido". Aquí, cuando miramos el ángulo de funciones, generalmente cuando las llamamos obtiene un valor calculado y el uso. Hay otras funciones que también cambian algunos valores al calcular el valor "exigido", por lo que aquí el "cambio de algunos valores" es un efecto secundario. En la descripción de su oración, si una función no devuelve nada, solo se usa para sus efectos secundarios, por lo que aquí, los efectos secundarios son "cambiar algunos valores".