El concepto de función pura o de función impura viene dado por si el resultado de la función depende solamente de los parámetros o si depende de los parámetros y de otros factores. Para definir lo de una manera más formal sería:
Función Pura
- Siempre devuelve el mismo resultado si se pasan los mismos parámetros.
- Nunca depende de ningún estado/dato/cambio durante la ejecución de un programa.
- Siempre devuelve algo.
- Definir los casos de prueba será sencillo.
- Algunas funciones puras: Array.map(), Array.reduce(), Array.filter(), Array.concat().
Función Impura
- Cambia el estado interno de cualquier parámetro que se haya pasado a la función.
- Puede tener efecto sin devolver nada.
- Escribir casos de prueba será un poco complicado.
- Algunas funciones impuras: Array.splice(), Array.sort(), Date.now(), Math.random().