El estilo de programación imperativo se practicó en el desarrollo web desde 2005 hasta 2013.
Con la programación imperativa, escribimos el código que enumeraba exactamente lo que nuestra aplicación debería hacer, paso a paso.
El estilo de programación funcional produce abstracción a través de formas inteligentes de combinar funciones.
Se menciona la programación declarativa en las respuestas y respecto a eso diré que la programación declarativa enumera algunas reglas que debemos seguir. Luego proporcionamos lo que llamamos un estado inicial de nuestra aplicación y dejamos que esas reglas definan cómo se comporta la aplicación.
Ahora, estas descripciones rápidas probablemente no tengan mucho sentido, así que veamos las diferencias entre la programación imperativa y declarativa al pasar por una analogía.
Imagine que no estamos construyendo software, sino que horneamos pasteles para vivir. Quizás somos malos panaderos y no sabemos cómo hornear un delicioso pastel como deberíamos.
Entonces nuestro jefe nos da una lista de instrucciones, lo que conocemos como una receta.
La receta nos dirá cómo hacer un pastel. Una receta está escrita en un estilo imperativo como este:
- Mezclar 1 taza de harina
- Añadir 1 huevo
- Agrega 1 taza de azúcar
- Vierte la mezcla en una sartén
- Coloque la sartén en el horno durante 30 minutos y 350 grados F.
La receta declarativa haría lo siguiente:
1 taza de harina, 1 huevo, 1 taza de azúcar - Estado inicial
Reglas
- Si todo está mezclado, colóquelo en la sartén.
- Si todo está sin mezclar, colóquelo en un tazón.
- Si todo está en la sartén, colóquelo en el horno.
Por lo tanto, los enfoques imperativos se caracterizan por enfoques paso a paso. Comienzas con el paso uno y vas al paso 2 y así sucesivamente.
Eventualmente terminas con algún producto final. Entonces, al hacer este pastel, tomamos estos ingredientes, los mezclamos, los ponemos en una sartén y en el horno y usted obtiene su producto final.
En un mundo declarativo, es diferente. En la receta declarativa separaríamos nuestra receta en dos partes separadas, comenzando con una parte que enumere el estado inicial de la receta, como las variables. Entonces, nuestras variables aquí son las cantidades de nuestros ingredientes y su tipo.
Tomamos el estado inicial o los ingredientes iniciales y les aplicamos algunas reglas.
Así que tomamos el estado inicial y los pasamos a través de estas reglas una y otra vez hasta que tengamos un pastel de fresa de ruibarbo listo para comer o lo que sea.
Entonces, en un enfoque declarativo, tenemos que saber cómo estructurar adecuadamente estas reglas.
Entonces, las reglas que podríamos querer examinar nuestros ingredientes o nuestro estado, si se mezclan, póngalos en una sartén.
Con nuestro estado inicial, eso no coincide porque aún no hemos mezclado nuestros ingredientes.
Entonces, la regla 2 dice que si no se mezclan, mézclelos en un tazón. De acuerdo, sí, esta regla se aplica.
Ahora tenemos un tazón de ingredientes mezclados como nuestro estado.
Ahora aplicamos ese nuevo estado a nuestras reglas nuevamente.
Entonces, la regla 1 dice que si los ingredientes se mezclan, colóquelos en una sartén, está bien, sí, ahora la regla 1 se aplica, vamos a hacerlo.
Ahora tenemos este nuevo estado donde se mezclan los ingredientes y en una sartén. La regla 1 ya no es relevante, la regla 2 no se aplica.
La regla 3 dice que si los ingredientes están en una sartén, colóquelos en el horno, genial esa regla es lo que se aplica a este nuevo estado, vamos a hacerlo.
Y terminamos con una deliciosa tarta de manzana caliente o lo que sea.
Ahora, si eres como yo, puedes estar pensando, ¿por qué todavía no estamos haciendo una programación imperativa? Esto tiene sentido.
Bueno, para flujos simples, sí, pero la mayoría de las aplicaciones web tienen flujos más complejos que el diseño de programación imperativo no puede capturar adecuadamente.
En un enfoque declarativo, podemos tener algunos ingredientes iniciales o estado inicial como textInput=“”
, una sola variable.
Tal vez el ingreso de texto comienza como una cadena vacía.
Tomamos este estado inicial y lo aplicamos a un conjunto de reglas definidas en su solicitud.
Si un usuario ingresa texto, actualice el ingreso de texto. Bueno, ahora eso no se aplica.
Si se representa la plantilla, calcule el widget.
- Si textInput se actualiza, vuelva a representar la plantilla.
Bueno, nada de esto aplica, por lo que el programa solo esperará a que suceda un evento.
Entonces, en algún momento, un usuario actualiza la entrada de texto y luego podemos aplicar la regla número 1.
Podemos actualizar eso a “abcd”
Así que acabamos de actualizar nuestro texto y las actualizaciones de entrada de texto, la regla número 2 no se aplica, la regla número 3 dice si la entrada de texto es actualizada, lo que acaba de ocurrir, luego vuelve a renderizar la plantilla y luego volvemos a la regla 2 que dice si la plantilla se representa , calcular el widget, está bien vamos a calcular el widget.
En general, como programadores, queremos luchar por diseños de programación más declarativos.
Imperativo parece más claro y obvio, pero un enfoque declarativo se adapta muy bien para aplicaciones más grandes.