Print Friendly, PDF & Email

En esta ocasión hablaremos de cuatro formas de pensar para programar Javascript, con los enfoques o paradigmas de programación iterativo, recursivo, funcional y declarativo. Cada uno de ellos es tan distinto del otro que se les considera como paradigmas de programación separados, aunque esto no quiere decir que un experto no pueda usarlos unos con otros. Siempre es bueno conocer distintas formas de pensar y de resolver problemas.

pensar para programar en Javascript

Definición del problema

Para mostrar las distintas formas de pensar, plantearemos el siguiente problema:

Dado un número n que es un entero positivo obtener todas las potencias de 2 desde el cero hasta el valor n y listarlas en un vector de resultados.

Programar Javascript con Pensamiento Iterativo

Este es el enfoque tradicional para programar en Javascript. Para el enfoque iterativo deberemos de desglosar el poblema para realzarlo paso por paso. Las personas que resuelven el problema mediante este paradigma normalmente primero resuelven el problema con un planteamiento lógico-matemático y luego lo codifican. Este tipo de código es demasiado explícito, pero puede modelarse fácilmente con diagramas de flujo. Conceptos que puedes incluir estos programas de manera implícita podrían ser indices, máquinas de estados, condicionales, repetitivas, etc.

  1. Definimos que deberemos de regresar un arreglo.
  2. Para cada número i con valores que van desde 0 hasta n agregamos al arreglo 2 elevado a la i-ésima potencia
  3. Regresamos el arreglo con los valores

 

function powersOfTwo(n){
  var result = [];
  for (var i = 0; i <= n; i  ) {
    result.push(Math.pow(2, i));
  }
  return result;
}

Programar Javascript con Pensamiento Recursivo

recursividad

El enfoque recursivo es un enfoque que se centra en una mentalidad de que a veces es más fácil comprender una tarea repetitiva con mínimas variaciones que desglosarla en muchos pasos. Este tipo deprogramas suele ser bastante compacto pero muy poderoso si se tiene mucha RAM.

Este enfoque requiere un enfoque puramente algorítmico, las matemáticas usadas tienden a ser minimalistas y se basan mucho en el principio de inducción de las matemáticas discretas. Conceptos que podrían venir implícitos en este tipo de programas podrían ser, condición de paro, recursividad de dos pasos, inducción matemática, subrutinas, cortes, etc.

  1. Para el caso más sencillo si n vale cero deberemos regresar el valor 1 dentro de un arreglo.
  2. En los demás casos, regresaremos el valor de la potencia de 2 a la n al final de un arreglo que nos cree la llamada a este procedimiento realizado para el valor n quitándole uno.
function powersOfTwo(n){
  if(n==0){
    return [1];
  }else{
    return powersOfTwo(n-1).concat(Math.pow(2,n));
  }
}

Programar Javascript con Pensamiento Funcional

Functional Javascript

Este enfoque para programar en Javascript surge principalmente en EcmasCript 6 (¡Y lo aman todos los hipsters del código!). Para el enfoque funcional se necesita una metalidad estrictamente matemática, y un razonamiento causal. Es un enfoque cada vez menos común debido a que se necesita una muy amplia capacidad de abstracción. Conceptos típicamente funcionales que normalmente vienen implícitos en este tipo de programas podrían ser generadores, iteradores, lambdas, etc.

  1. Regresaremos un arreglo de tamaño n 1 con los valores individuales creados por la siguiente función
  2. Cada elemento e con indice i nos refresará un valor de 2 elevado a la potencia i
powersOfTwo = n => [...Array(n - 1)].map((e, i) => Math.pow(2, i));

Programar Javascript con Pensamiento Declarativo

Este es el noevo enfoque que se busca en la nueva versión Ecma Script 7 para programar en Javascript. Para este enfoque se necesita saber expresar que es lo que se quiere sin decir como se quiere que se haga. Este enfoque contiene al belleza de que es fácilmente entendible para quien lo lee, pero su implementación puede ocultar detalles como procesamiento asíncrono y optimizaciones. Algunos conceptos que podrían venir implícitos en este tipo de programas podrían ser backtracking, unificación, evaluación peresoza, modelo de datos, etc.

  1. Regresaremos un arreglo a partir de los siguientes elementos: función 2 elevado al indice de un elemento y un arreglo de tamaño n-1.
function powersOfTwo(n) {
  return Array.from({length: n-1}, (e, i) => Math.pow(2,i));
}

Radio

Do NOT follow this link or you will be banned from the site!