¿Cómo se puede usar la programación funcional en aplicaciones web, cuando las aplicaciones web tienen estado?

La web no tiene estado. El estado se le otorga como una secuencia de valores.

Un servidor web recibe una solicitud del cliente (navegador) y calcula una respuesta. Entre una solicitud y la siguiente, el programa del servidor no mantiene ningún estado local. De hecho, en algunos modelos de servidor web, el programa se inicia con la solicitud como entrada y sale completamente tan pronto como produce una respuesta. El hecho de que los servidores modernos no salgan se debe solo al hecho de que iniciar / cerrar un proceso en sí mismo es muy costoso en tiempo y recursos, por lo tanto, es más eficiente mantener vivo el proceso y entregarle una solicitud completamente diferente. Sin embargo, tenga en cuenta que la nueva solicitud generalmente no tiene ninguna relación con la anterior. Probablemente provenga de otro usuario, y usted absolutamente quiere evitar el estado de un usuario para influir en otro usuario.

Si se va a preservar algún estado, se crea una llamada “sesión”. El estado de la sesión se convierte, lógicamente, en una entrada adicional y una salida adicional. Comienza con la solicitud que contiene un identificador de sesión. Expande el identificador de sesión a un registro de estado de sesión. Luego calcula una respuesta y un nuevo registro de estado de sesión para la salida. Por lo tanto, el “estado” solo persiste fuera del proceso del servidor. A menudo en una base de datos.

También tenga en cuenta que si bien una de las ideas detrás de la programación funcional es que su código no debe modificar el estado, eso no significa que no haya ningún estado. El estado existe en forma de un nuevo valor que se calcula a partir de los valores existentes. En lugar de una secuencia de estados, tiene una secuencia de valores. Es decir, en lugar de modificar una estructura (valor) en su lugar, calcula una nueva estructura (valor).
Si su lenguaje le permite abstraerse de este mismo concepto, terminará con lo que se conoce como una mónada de estado, que es una abstracción sobre una secuencia de valores donde solo tiene dos operaciones más allá de las monádicas estándar: recuperar el valor actual y definir un Nuevo valor actual.

Lo principal que hay que entender sobre FP es que no puede manejar el estado. En cambio, debe pensar que el estado en FP debe modelarse explícitamente .

Esto generalmente se realiza modelando el estado como una estructura de datos explícita que se pasa a cada función y se devuelve desde cada función. Efectivamente, modela el estado al enhebrarlo a través de cada función. Las mónadas son una notación conveniente para reducir el desorden que surge de hacer esto, pero no son esenciales para el estado del modelo.

Voy a darle un ejemplo que no es web para simplificar, pero el mismo principio se aplica a todo. Por ejemplo, si queremos contar cuántas veces se llama a una función. En un lenguaje imperativo, harías algo como esto:

  int c = 0;
 int f (int x) {
   c ++;
   retorno (x + 99);
 }

En un programa funcional, usted administra explícitamente quién necesita ver el estado (en nuestro ejemplo, ‘c’), y si alguna función necesita modificarlo, devuelve el nuevo valor como parte del valor de retorno de la función. Me gusta esto:

fxc = (x+99,(c+1))

Y la próxima vez que llame a f, lo llamará con el nuevo valor de c. Cualquier otra función que necesite actualizar el valor de c se trata de manera similar.

Por lo tanto, en lugar de que la función tenga el tipo
f : int -> int

Lo modifica a:

f: int -> state -> (int , state)

Su tipo de “estado” varía según lo que está tratando de lograr. En nuestro ejemplo simple, es ‘int’, pero para aplicaciones web, podría contener cualquier cantidad de cosas, incluyendo cosas como id de sesión, tokens de autenticación y similares.

(Por mi pequeño conocimiento) ¡Sí! Algo llamado mónadas.
Mónada (programación funcional)

Intuitivamente, haces un truco donde puedes pasar tu estado como entrada para tus funciones. Y su funcional devolverá el valor y el nuevo estado. 🙂 (¿Parece familiar en términos de programación funcional?)

¡Debe leer los artículos en la página anterior sobre los métodos de E / S y los métodos de escritura que son ejemplos clásicos de estados!

Debo admitir que no conozco ninguna implementación de estos en aplicaciones web.