La programación funcional del mundo real no es apátrida.
Es una combinación de aversión al estado y consciente del estado. Obviamente, debe “hacer E / S” (es decir, tener algún efecto en el mundo) para que el objetivo no sea eliminar los efectos con estado. Es mantener el mayor seguimiento posible de ellos. Puede ir tan lejos como para enhebrar explícitamente el estado en una función como parámetro (por ejemplo, la mónada State de Haskell, que modela el estado con un enhebrado explícito, lo que significa que la programación sin estado puede “parecer” con estado para facilitar la lectura). A veces, sin embargo, necesita un estado mutable y, como optimización del rendimiento, está bien. En pequeñas dosis y bajo condiciones controladas, el estado mutable no es malo y no arruinará todo.
La programación funcional se trata de preferir objetos simples que se componen bien: datos inmutables y funciones referencialmente transparentes . Los datos inmutables son más fáciles de construir que un objeto con estado que puede requerir alguna secuencia de inicialización que existe en otra parte del código.
- ¿De qué se trata realmente el desarrollo de software?
- ¿Hay una regla simple a seguir para determinar qué características justifican una prueba unitaria y cuáles se verifican durante las pruebas de integración?
- ¿Pronto podrá contratar a un programador informático de primer nivel en Canadá por $ 30 / hora?
- ¿Qué hace que el probador manual sea más fuerte?
- ¿Es una empresa de consultoría un buen lugar para comenzar una carrera de ingeniero de software para un recién graduado, si quiero hacer la transición a Google, Apple, Blizzard, etc., después de dominar la programación?
Los efectos con estado, sin control, no componen bien. El punto muerto es un ejemplo especialmente atroz: puede tener dos programas que funcionan perfectamente bien de forma aislada pero que se destruyen entre sí en paralelo. Eso es malo.
La programación imperativa también permite métodos demasiado largos y objetos complicados. Una función con 14 parámetros es una monstruosidad, pero un método Java típico tiene suficientes efectos de estado que, si se contabilizaran explícitamente, y se cubrieran todas las variaciones en la ejecución, ese método se vería bastante atroz en un lenguaje FP, y eso es algo bueno, porque evita que las personas escriban esos métodos de 1000 líneas. Hay buenos usos del estado, pero un mal uso común del estado es externalizar los costos en otras partes del programa: hacer algo horriblemente complicado pero ocultarlo del código principal, generando así el código de espagueti OOP-y.
La programación funcional no es una panacea, y ni siquiera creo que sea un término bien definido, sino que es una cultura de hacer las cosas de manera rápida pero correcta. No es antiestatal. Es un estado anti-inesperado.