Побочный эффект - что это?

Я действительно наслаждаюсь всеми подкастами от сети TWIT, хотя FLOSS Weekly и безопасность Теперь являются моими любимыми подкастами "техника". Я на самом деле никогда не слышал подкаст Переполнения стека, но буду определенно давать ему попытку после наблюдения всех рекомендаций здесь.

кроме того, я полагаю, что Alex Lindsay (Пиксельного Корпуса, и часто на Macbreak Weekly на УПРЕКЕ) будет запускать очень технический подкаст на разработке Mac. Я с нетерпением жду этого, поскольку я был основным программист Java и интересуюсь изучением XCode и Obj-C.

22
задан user812786 14 June 2017 в 19:09
поделиться

3 ответа

Побочный эффект - это все, что делает метод, кроме вычисления и возврата значения. Любое изменение значений полей экземпляра или класса является побочным эффектом, как и рисование чего-либо на экране, запись в файл или сетевое соединение.

Строго говоря, «функция» определяется как не имеющая побочных эффектов - что есть почему Java использует вместо этого слово «метод». Реальная функция без возвращаемого значения была бы бессмысленной.

Очевидно, что метод, не имеющий возвращаемого значения, должен иметь какой-то побочный эффект, который оправдывает его существование. Примером являются методы Set - побочным эффектом является изменение внутреннего состояния объекта.

45
ответ дан 29 November 2019 в 03:46
поделиться

Это означает, что вы не вызываете «истинную» функцию в математическом смысле. Такая функция всегда возвращает значение, которое полностью определяется ее входными параметрами. Нет никакого «состояния», которое можно было бы изменить, и ничего другого случиться не может. Вот почему функциональное программирование интересно с точки зрения распараллеливания; это упрощает доказательство того, что, например, два вызова функций независимы и могут выполняться параллельно.

См. статью в Википедии о чистых функциях для получения дополнительных сведений.

14
ответ дан 29 November 2019 в 03:46
поделиться

Побочный эффект - это когда вызов метода изменяет состояние класса. Итак

public class SideEffectClass{

    private int state = 0;


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

Здесь doSomething (int arg0) имеет побочный эффект изменения переменной состояния.

Когда вы думаете о программе, вы можете думать о ней как о командах + состояние + ввод. Таким образом, если домен программы - это диапазон всех возможных входных * состояний и программа имеет побочные эффекты, вы можете видеть, что кодомен возможных результатов для приложения может стремительно расти по мере увеличения количества побочных эффектов. Это делает возможные состояния программы большими, что приводит к сложному тестированию. Парадигма функционального программирования предназначена для устранения побочных эффектов. Делая функции первоклассными гражданами и делая все объявления неизменяемыми, функциональное программирование предотвращает побочные эффекты,

3
ответ дан 29 November 2019 в 03:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: