Pregunta

Como siempre lo entendí, cualquier cambio en el estado de los programas (o algo relacionado con IO) es un efecto secundario. No importa si el cambio se produce en una variable global o en un campo privado del objeto al que se llama el método. De ello se deduce que todos los métodos que no devuelven nada no hacen nada o tienen un efecto secundario. Mi confusión proviene de uno de los instructores de nuestra universidad (que todavía es un estudiante y, por lo tanto, todavía no es omnisciente). no tiene efectos secundarios.

¿Fue útil?

Solución

Su instructor está equivocado. Con disculpas a los editores de SO por no pegar todo el artículo aquí, esto es lo que Wikipedia tiene que decir:

http://en.wikipedia.org/wiki/Side_effect_ (computer_science)

Cita de dinero # 1:

  

En informática, se dice que una función o expresión tiene un efecto secundario si, además de producir un valor, también modifica algún estado o tiene una interacción observable con funciones de llamada o el mundo exterior.

Cita de dinero # 2:

  

En presencia de efectos secundarios, el comportamiento de un programa depende de la historia pasada; es decir, el orden de evaluación es importante.

Los setters que no son NOP siempre satisfacen ese criterio.

Otros consejos

Getters y setters son simplemente azúcar sintáctica para los métodos get_ y set_. Pueden absolutamente tener efectos secundarios (aunque probablemente sea una mala idea comenzar a ajustar muchos campos cuando todo lo que la persona que llama quería era incrementar un contador o algo así).

Primero que nada: ¡Soy consciente de la etiqueta agnóstica de idiomas! " runako " Respondió la pregunta correctamente. Pero a menudo desea aplicar sus conocimientos al mundo real, por lo que creo que sería bueno también proporcionar una respuesta que aborde este problema de una manera más pragmática.

Cuando se trata de lenguajes del mundo real como c ++, c # o java, ¡incluso una función nop tiene efectos secundarios reales que pueden hacer que se ejecute el código!

Solo piensa en constructores estáticos. Aunque las especificaciones no siempre especifican la hora en que se ejecuta un constructor estático para una clase, la mayoría de las veces será el momento en el que se accede por primera vez a un método o miembro de la clase.

Ejemplo en C #:

class NotSoObvious
{
    static NotSoObvious()
    {
        CauseSomeSideEffects();
    }

    // calling this can cause the constructor to run first!
    public static void DoNothing()
    {
        return;
    }
}

Además, ¡incluso un método que no se llama en absoluto puede causar efectos secundarios! Piense en la reflexión (la capacidad de un programa para consultar información sobre su propia estructura). Cuando un método está presente pero no se llama, todavía se puede detectar por reflexión.

¡Un método sin llamadas seguramente tiene un efecto secundario en un programa que genera la cantidad de métodos que contiene!

Todo se reduce a esto: si desea saber acerca de los efectos secundarios reales de un método, primero tiene que determinar qué considera incluso un "efecto secundario".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top