Programación imperativa vs programación declarativa: la diferencia explicada en un lenguaje sencillo

Como instructor de codificación, es mi deber enviar a los programadores al mundo pensando en nuevas formas. Se produce un cambio importante en el pensamiento cuando pasamos de la programación imperativa a la declarativa.

Una vez que mis estudiantes han aprendido JavaScript básico, repasaremos la programación funcional y los métodos de matriz utilizados en un estilo de codificación declarativa. Aquí es donde sus cerebros comienzan a explotar, chisporrotear y derretirse como malvaviscos sobre el fuego.

¿Qué es la programación imperativa?

Como principiante, probablemente haya codificado en su mayoría en un estilo imperativo: le da a la computadora un conjunto de instrucciones para seguir y la computadora hace lo que usted quiere en una secuencia fácil de seguir.

Imagina que tenemos una lista de las contraseñas más utilizadas en el mundo:

const passwords = [ "123456", "password", "admin", "freecodecamp", "mypassword123", ];

Nuestra aplicación comprobará la contraseña del usuario al registrarse y no le permitirá crear una contraseña que sea de esta lista.

Pero antes de hacer eso, queremos refinar esta lista. Ya tenemos un código que no permite que el usuario se registre con una contraseña de menos de 9 caracteres. Entonces, podemos reducir esta lista a solo contraseñas de 9 caracteres o más para acelerar nuestra verificación.

Imperativamente, escribiríamos:

// using the passwords constant from above let longPasswords = []; for (let i = 0; i = 9) { longPasswords.push(password); } } console.log(longPasswords); // logs ["freecodecamp", "mypassword123"];
  1. Creamos una lista vacía llamada longPasswords.
  2. Luego escribimos un bucle que se ejecutará tantas veces como contraseñas haya en la passwordslista original .
  3. Luego obtenemos la contraseña en el índice de la iteración del ciclo en la que estamos actualmente.
  4. Luego verificamos si esa contraseña es mayor o igual a 9 caracteres.
  5. Si es así, lo ponemos en la longPasswordslista.

Uno de los puntos fuertes de la programación imperativa es el hecho de que es fácil razonar. Como una computadora, podemos seguir paso a paso.

¿Qué es la programación declarativa?

Pero hay otra forma de pensar en la codificación: como un proceso de definición constante de qué son las cosas. Esto se conoce como programación declarativa.

La programación imperativa y declarativa logra los mismos objetivos. Son solo diferentes formas de pensar sobre el código. Tienen sus ventajas e inconvenientes y hay ocasiones en las que se pueden utilizar ambos.

Aunque la programación imperativa es más fácil de razonar para los principiantes, la programación declarativa nos permite escribir un código más legible que refleja exactamente lo que queremos ver. Combinado con buenos nombres de variables, puede ser una herramienta poderosa.

Entonces, en lugar de darle a la computadora instrucciones paso a paso, declaramos qué es lo que queremos y asignamos esto al resultado de algún proceso.

// using the passwords constant from above const longPasswords = passwords.filter(password => password.length >= 9); console.log(longPasswords); // logs ["freecodecamp", "mypassword123"];

La lista de longPasswordsse define (o declara) como la lista de passwordsfiltrados solo para contraseñas mayores o iguales a 9 caracteres.

Los métodos de programación funcional en JavaScript nos permiten declarar cosas limpiamente.

  • Esta es una lista de contraseñas.
  • Esta es una lista de solo contraseñas largas. (Después de correr filter).
  • Esta es una lista de contraseñas con identificadores. (Después de correr map).
  • Esta es una única contraseña. (Después de correr find).

Uno de los puntos fuertes de la programación declarativa es que nos obliga a preguntar primero qué queremos. Es al nombrar estas cosas nuevas que nuestro código se vuelve expresivo y explícito.

Y cuando nuestros compañeros desarrolladores vienen y miran nuestro código, pueden encontrar errores más fácilmente:

“Llamas a esta variable 'índice', lo que me hace esperar un número, pero veo que es el resultado del filtercual devuelve una matriz. ¿Que pasa con eso?"

Animo a los alumnos a escribir código declarativo con la mayor frecuencia posible, definiendo constantemente (y refactorizando para redefinir) qué son las cosas.

En lugar de mantener un proceso imprescindible de todo en su cabeza, puede mantener una más tangible cosa en su cabeza con una definición clara.

Mike Zetlow es el instructor principal en 10x Code Camp .