Programación imperativa vs programación declarativa

En pocas palabras, podemos escribir código de dos formas: imperativo y declarativo.

Podemos definirlo de la siguiente manera:

Programación imperativa : dígale a la máquina qué hacer y obtenga el resultado que desea.

Programación declarativa : dígale a la máquina lo que quiere y deje que la máquina calcule cómo hacerlo.

Ejemplos de programación imperativa y programación declarativa

Para dar un ejemplo simple, suponga que queremos hacer que cada valor de la matriz sea el doble del valor original.

El código de programación imperativa puede ser el siguiente:

var numeros = [1,2,3,4,5] var doubled = [] for (var i = 0; i <numeros.longitud; i ++) {var newNumber = numeros [i] * 2 doubled.push (newNumber) } console.log (duplicado) // => [2,4,6,8,10]

Recorrimos toda la matriz, sacamos cada elemento, multiplicamos por 2 y luego colocamos el nuevo valor en la nueva matriz hasta que esté listo.

Una forma declarativa de programación puede usar Array.map, de la siguiente manera:

var numeros = [1,2,3,4,5] var doubled = numeros.map (function (n) {return n * 2}) console.log (duplicado) // => [2,4,6,8 , 10]

map devuelve una nueva matriz basada en la matriz anterior. En este ejemplo, al pasar los elementos de la matriz anterior a map (function (n) {return n * 2}, se devuelve una nueva matriz. Cada valor de la nueva matriz es Es el doble del valor de la matriz anterior correspondiente.

El papel de la función de mapa es abstraer el proceso de atravesar la matriz, lo que nos permite prestar más atención a lo que queremos. Tenga en cuenta que la función que pasamos al mapa es pura. No puede tener efectos secundarios (cambiar otros estados adicionales), solo toma un número y lo duplica.

Para las matrices, existen otras funciones abstractas declarativas comunes. Por ejemplo, para sumar todos los elementos de la matriz, podemos hacer esto:

var numeros = [1,2,3,4,5] var total = 0for (var i = 0; i <numeros.longitud; i ++) {total + = numeros [i]} console.log (total) // = > 15

O podemos usar la función declarativa reduce:

var numeros = [1,2,3,4,5] var total = numeros.reduce (función (suma, n) {retorno suma + n}, 0); console.log (total) // => 15

Reducir utiliza una función determinada para recorrer la matriz y calcular un valor. Aplica esta función a cada elemento de la matriz. En cada llamada, el primer parámetro (suma en el ejemplo) es el resultado de llamar a la función en el elemento anterior, y el segundo parámetro (n) es el elemento actual. Entonces, en este ejemplo, en cada paso, el elemento actual de la matriz n se agrega a la suma, de modo que finalmente podamos obtener la suma de toda la matriz.

De manera similar, reduce nos abstrae del recorrido de bucle y la administración de estado, y nos brinda un método general de atravesar una matriz para calcular un valor. Todo lo que tenemos que hacer es aclarar lo que queremos.

¿Extraño?

Te lo prometo, si no has visto el mapa o la reducción antes, te resultará extraño. Como programadores, siempre estamos acostumbrados a especificar cómo hacer que las cosas sucedan, "atravesando la matriz", "si es así y así", "actualiza esta variable con un nuevo valor". Ahora que sabemos cómo decirle a la máquina qué hacer, ¿por qué molestarse en aprender esta abstracción de aspecto extraño?

En muchos casos, el código imperativo es bueno. Cuando escribimos lógica empresarial, normalmente tenemos que escribir la mayor parte del código necesario, porque no hay abstracción más general en nuestra lógica empresarial.

Pero si nos tomamos el tiempo para aprender (¡o construir!) Métodos abstractos declarativos, podemos usar algunos atajos poderosos al escribir código. Primero, solemos escribir cada vez menos, lo que es un triunfo con resultados rápidos. Luego, también podemos pensar en el problema a un nivel superior, parados en la nube y pensar en lo que queremos que suceda, en lugar de quedarnos atrapados en el barro y pensar en cómo hacer que suceda.

SQL

Puede que no te des cuenta, pero en SQL ya has utilizado la programación declarativa.

Puede pensar en SQL como un lenguaje de consulta declarativo para procesar conjuntos de datos. ¿Ha escrito toda la aplicación en SQL? Tal vez no. Pero puede ser muy poderoso para tratar con conjuntos de datos relacionados.

Haz una consulta:

SELECCIONAR * de perrosINNER JOIN propietariosDONDE perros.owner_id = propietarios.id

Imagina que usas programación imperativa para escribir esta lógica:

// perros = [{nombre: 'Fido', owner_id: 1}, {...}, ...] // propietarios = [{id: 1, name: 'Bob'}, {...}, ...] var dogsWithOwners = [] var dog, ownerfor (var di = 0; di <dogs.length; di ++) {dog = dogs [di] for (var oi = 0; oi <owner.length; oi ++) { propietario = propietarios [oi] if (propietario && dog.owner_id == owner.id) {dogsWithOwners.push ({perro: perro, propietario: propietario})}}}}

No estoy diciendo que SQL sea fácil de entender, o que sea fácil de entender cuando lo ve por primera vez, pero en comparación con ese código complejo, es mucho más conciso.

Pero no solo es más corto y más fácil de leer, SQL también nos brinda muchos otros beneficios. Debido a que hemos abstraído el método de implementación específico, solo podemos enfocarnos en lo que queremos y luego dejar que la base de datos optimice los pasos de implementación específicos.

Si no lo usamos, nuestro propio código será lento, porque tenemos que recorrer toda la matriz de propietarios para cada perro en la lista.

Pero en el ejemplo de código SQL, podemos dejar que la base de datos implemente cómo devolvernos los resultados correctos. Si tiene sentido utilizar un índice (suponiendo que ya lo hayamos establecido), la base de datos lo hará, lo que mejorará enormemente el rendimiento.

Si esta consulta se ejecutó hace un segundo, se puede leer directamente desde la caché. Al dejar que la computadora decida su propia forma de implementación, solo necesitamos cambiar un poco nuestras percepciones para obtener grandes beneficios.

Fuente: Nuggets

 


Además, si desea mejorar su capacidad de programación, ¡aprenda el lenguaje C y la programación C ++! Adelantar en una curva, ¡un paso más rápido! Puede que pueda ayudarte aquí ~

UP ha subido a la página de inicio algunos tutoriales en vídeo sobre el aprendizaje de la programación C / C ++. ¡Aquellos que estén interesados ​​o estén aprendiendo deben ir y echar un vistazo! Te será de ayuda ~

Compartir (código fuente, video del proyecto real, notas del proyecto, tutorial introductorio básico)

¡Bienvenidos socios que cambian de carrera y aprenden programación, use más información para aprender y crecer más rápido que si lo piensa usted mismo!

 

Programación de aprendizaje:

Programación de aprendizaje:

Supongo que te gusta

Origin blog.csdn.net/weixin_45713725/article/details/114978338
Recomendado
Clasificación