Función pura

Se considera que una función es pura si tiene las siguientes propiedades:

  • es determinista: dados los mismos argumentos, devuelve siempre el mismo resultado. Es decir, el resultado sólo depende de los argumentos que recibe la función, no de un estado global que pueda variar durante la ejecución del programa ni de canales I/O.
  • no tiene efectos colaterales: no modifica objetos mutables ni emite salidas por los canales de I/O.

Ejemplos:

  • una función sin(x), que devolviese el seno de un número dado se consideraría una función pura.
  • printf() o cualquier otra función que emita datos por consola, sería impura.
  • una función inc(x), que incrementase el valor de x con una variable global y sería también impura por dos motivos: modificaría el estado de un elemento mutable y el resultado dependería de una variable global que puede variar durante la ejecución del programa. las funciones que reciban parámetros por referencia son, en general, impuras, porque permiten la modificación de los elementos mutables.

Las funciones puras son un elemento fundamental en la programación funcional. Su utilidad se deriva de la mejora en comprensibilidad, optimización y testeabilidad del código.