¿ Qué es la programación funcional ?
La programación funcional (en su estado más puro) es la aplicación del cálculo lambda. Es decir:
Se puede considerar al cálculo lambda como el más pequeño lenguaje universal de programación. Consiste en una regla de transformación simple (sustitución de variables) y un esquema simple para definir funciones.
Con la programación funcional, la interpretación del código se vuelve más sencilla y nuestra declaración de variables pasa a ser una asignación de cierto valor a un símbolo. Ésta variable no cambiará. Comenzamos por definir qué no es funcional:
La línea 4 es la que hace que no sea funcional*.
El problema de volver a asignarle un valor a cada elemento de \$enteros, está en que, el valor de la variable \$enteros va a ser distinto antes y después del for. Lo que, en este trozo de código parece no importar, pero en un script de mayor cantidad de líneas puede comenzar a perderse noción del valor de la variable, dependiendo de la línea en la que se encuentra. El mismo ejemplo desde programación funcional sería:
array_map es una función común en programación funcional, tanto que PHP la implementa nativamente. array_map toma dos parámetros, una función y un array. Básicamente ejecuta la función por cada elemento del array, además se lo pasa como parámetro (\$elem). Luego devuelve un nuevo array con las modificaciones a cada elemento. Nótese que éste será un nuevo array, por lo tanto \$enteros continúa teniendo su primer valor. Nótese que la función que se pasa como parámetro a array_map, es una función anónima.(1) Algo muy importante de la programación funcional es que todas las funciones deben devolver el mismo valor si se les pasa el mismo argumento. (2) Es importante notar que el orden de evaluación de PHP es estricto, es decir, antes de evaluar una función, se evalúan sus argumentos, ésto hace la interpretación de un programa mucho más sencilla. Teniendo en cuenta (1) y (2) obtenemos un estilo de programación mucho más interpretable y sencillo.
*Además de la línea 4, la línea 3 tampoco es funcional dado el i++, que es lo mismo que i = i + 1.