En ciencias de la computación se dice que una función o expresión tiene efecto colateral, efecto de lado o efecto secundario si esta, además de retornar un valor, modifica el estado de su entorno. Por ejemplo, una función puede modificar una variable global o estática, modificar uno de sus argumentos, escribir datos a la pantalla o a un archivo, o leer datos de otras funciones que tienen efecto secundario. Los efectos secundarios frecuentemente hacen que el comportamiento de un programa sea más difícil de predecir.

La programación imperativa generalmente emplea funciones con efecto secundario para hacer que los programas funcionen, la programación funcional en cambio se caracteriza por minimizar estos efectos.

En el diseño de CPU las instrucciones con efecto colateral son aquellas instrucciones que modifican valores internos del CPU de forma no explícita – de hecho, la instrucción ADD puede o no modificar otros registros (carry, zero, overflow, etc). Esto causa un problema cuando se diseña un CPU que usa “pipeline” de instrucciones y soporta instrucciones con efecto colateral. Se debe prestar especial cuidado para evitar este riesgo.

Transparencia referencial

Que una función no tenga efecto secundario o colateral es una condición necesaria pero no suficiente para que sea transparente referencialmente. Transparencia referencial significa que una expresión (por ejemplo, una llamada a una función) puede ser reemplazada por su valor; esto requiere que la expresión no tenga efecto colateral y que sea pura, o sea, que siempre retorne el mismo resultado con la misma entrada.