Programación funcional: estado vs. reasignación

Necesito ayuda para entender la diferencia entre mi noción actual de estado de POO y la forma en que se haría en un lenguaje funcional como Haskell o Clojure.

Para usar un ejemplo trillado, supongamos que estamos tratando con objetos / estructuras / cuentas simplificadas de cuentas bancarias. En un lenguaje OOP, tendría alguna clase con una referencia a una BankAccount, que tendría variables de instancia para cosas como la tasa de interés y métodos como setInterestRate () que cambian el estado del objeto y generalmente no devuelven nada. En Clojure, por ejemplo, tendría una estructura de cuenta bancaria (un hashmap glorificado) y funciones especiales que toman un parámetro de cuenta bancaria y otra información, y devuelven una nueva estructura. Entonces, en lugar de cambiar el estado del objeto original, ahora tengo uno nuevo que se devuelve con las modificaciones deseadas.

Entonces ... ¿qué hago con eso? ¿Sobrescribir la variable que hacía referencia a la antigua cuenta bancaria? Si es así, ¿eso tiene ventajas sobre el enfoque OOP que cambia el estado? Al final, en ambos casos parece que uno tiene una variable que hace referencia al objeto con los cambios necesarios. Retrasado como soy, solo tengo un concepto vago de lo que está sucediendo.

Espero que tenga sentido, gracias por cualquier ayuda!

Respuestas a la pregunta(4)

Su respuesta a la pregunta