Говорят, что функция или выражение имеют побочный эффект, если, в дополнение к возвращению значения, они меняют некоторое состояние программы или осуществляют видимую взаимодействие с викликальною функцией или внешним миром. Например, функция может изменять глобальную или статическую переменную, изменять один из своих аргументов, вызывать исключительную ситуацию, выводить данные на устройство вывода или файл, читать данные или вызвать другие функции с побочными эффектами. При наличии побочных эффектов, поведение программы зависит от истории; есть порядок вычислений разницы. Понимание программы с побочными эффектами требует снятия о контексте и истории; даже при наличии этих знаний трудно подобрать ход программы, а также пренебречь ее.
Побочные эффекты наиболее привычный способ взаимодействия с внешним миром (людьми, файловой системой, другими компьютерами в сети). Степень использования побочных эффектов зависит от парадигмы программирования. Императивное программирования известное частым использованием побочных эффектов. В функциональном программировании побочных эффектов используют редко. Функциональные языки такие как Standard ML или Scheme не запрещают побочные эффекты, но обычно программисты избегают их. Функциональная язык Haskell ограничивает побочные эффекты из-за статического систему типизации ; она использует концепцию монад.
Разработчики на языке ассемблера должны учитывать скрытые побочные эффекты - инструкции, изменяющие часть состояния процессора без указания этого в своих названиях. Классический пример скрытого побочного эффекта это арифметическая инструкция, которая явно изменяет регистр (явный эффект ( англ. overt effect )) и неявно меняет коды условий (скрытый побочный эффект), например, флажки, указывающие на то, что в результате получено ноль или переполнение. Один из недостатков набора инструкций со многими побочными эффектами состоит в возможности влияния на одну частицу состояния, например коды условий, тогда когда требование обновлять эти состояния последовательно может стать узким местом производительности. Проблема стоит особенно остро на процессорах разработанных с конвейером команд (с 1990) или с внеочередным исполнением. Такие процессоры могут потребовать дополнительную схему для перевркы на побочные эффекты и останавливать конвейер, если следующая инструкция зависит от последствий этих эффектов.
Прозрачность ссылок
Отсутствие побочных эффектов является необходимым, но не достаточным условием для прозрачности ссылок. Прозрачность ссылок значит, что выражение (такой как вызов функции) может быть заменен на его значение; для этого необходимо, чтобы выражение не только не имел побочных эффектов, но и был чистым (всегда возвращал тот же результат для одних входных данных).
Временные побочные эффекты
На побочные эффекты связаны с тем необходимым для выполнения действия, обычно не учитывают, когда речь идет о побочных эффектах или прозрачность ссылок. В большинстве программ желательно заменять длинные действия на более короткие, например, (60 / 3 * 2) на 40. Иногда, когда речь идет о синхронизации или тестирования, умышленно вставляются такие коды, имеющие часовой побочный эффект, например, Sleep (5000) или for (i = 0; i <10000; i ++){}. Эти инструкции не изменяют состояние кроме необходимости ожидания до их завершения.