# data[].attributes.body
La programación imperativa es un paradigma de programación, el cual emplea funciones para modificar el estado de un programa, consiste en solucionar un problema especificando una secuencia de acciones a través de procedimientos denominados ‘funciones’.

La programación imperativa, es un paradigma, consiste en conseguir un objetivo especificando cada acción.

# data[].attributes.body
Programacion imperativa
Es el paradigma de programación más antiguo.
Los lenguajes de programación imperativa son muy concretos y trabajan cerca del sistema. De esta forma, el código es, por un lado, fácilmente comprensible, pero, por el otro, requiere muchas líneas de texto fuente para describir lo que en los lenguajes de la programación declarativa se consigue con solo una parte de las instrucciones.

Los lenguajes de programación imperativa más conocidos son:

Java

C

C#

C++

Python

Ruby

Programación declarativa:
Se caracterizan por tener una sintaxis abreviada y abstracta. Siempre se describe el resultado final deseado, en lugar de mostrar todos los pasos de trabajo.
Los lenguajes de programación declarativa más conocidos son:

Prolog

Lisp

Haskell

Miranda

Erlang

SQL (en un sentido amplio)

# data[].attributes.body
Imperativa por el uso del imperativo a la hora de dar ordenes. Las declaraciones que se utilizan son más detalladas frente la declarativa, donde el procedimiento no está explicado paso a paso.
En resumen: la diferencia es el detalle de las instrucciones que nosotros ordenamos.

# data[].attributes.body
Los lenguajes de programación suelen tener 2 formas:

IMPERATIVO: es decir, como una secuencia de operaciones a realizar.

DECLARATIVO: es decir, se especifica el resultado deseado, no cómo lograrlo.

Los lenguajes de programación imperativa son como unas instrucciones paso a paso (cómo) redactadas para el ordenador. Describen de forma explícita qué pasos deben llevarse a cabo y en qué secuencia para alcanzar finalmente la solución deseada. En la programación declarativa, en cambio, se describe directamente el resultado final deseado (el qué). Pongamos un ejemplo culinario para entenderlo mejor: los lenguajes imperativos proporcionan la receta, mientras que los declarativos, fotos del plato preparado.

# data[].attributes.body
Programación imperativa:
En general, se usa para dar órdenes, instrucciones o advertencias. Las frases imperativas se construyen de manera diferente a las afirmativas: no se utiliza un sujeto porque se supone que el sujeto es siempre “you” y el verbo principal va en la forma infinitiva.

Programación declarativa:
Los Lenguajes Declarativos se caracterizan por tener una sintaxis abreviada y abstracta. Cuando hacemos Programación Declarativa tenemos que olvidarnos del paradigma de la Programación Orientada a Objetos, aquí no va a haber Clases, Objetos ni Métodos.

# data[].attributes.body
La programacion imperativa describe la programación que se hace con la descripción de cómo queremos que se ejecute el programa como secuencia de operaciones, describiendo el funcionamiento del mismo, en cambio la declarativa describe el resultado que queremos obtener a través de un resultado deseado y no del cómo alcanzarlo.

# data[].attributes.body
Programación imperativa o por procedimientos: es el más usado en general, se basa en dar instrucciones al ordenador de como hacer las cosas en forma de algoritmos, en lugar de describir el problema o la solución.

Programación declarativa: está basada en describir el problema declarando propiedades y reglas que deben cumplirse, en lugar de instrucciones. Hay lenguajes para la programación funcional, la programación lógica, o la combinación lógico-funcional.

# data[].attributes.body
La programación imperativa (del latín imperare = ordenar) es el paradigma de programación más antiguo. De acuerdo con este paradigma, un programa consiste en una secuencia claramente definida de instrucciones para un ordenador.

Programación declarativa es la que siempre se describe el resultado final deseado, en lugar de mostrar todos los pasos de trabajo. Para alcanzar el objetivo, en la programación declarativa se determina automáticamente la vía de solución. Esto funciona siempre y cuando las especificaciones del estado final se definan claramente y exista un procedimiento de ejecución adecuado. Si se dan las dos condiciones, la programación declarativa es muy eficiente.

# data[].attributes.body
Son dos paradigmas de programación comunes.
La diferencia entre la programación declarativa y la imperativa es que la programación declarativa se centra en lo que el programa debe lograr, mientras que la programación imperativa se centra en cómo el programa debe lograr el resultado.
Los lenguajes de programación imperativa más conocidos son:

Fortran

Java

Pascal

ALGOL

C

C#

C++

Ensambladores

BASIC

COBOL

Python

Ruby

Los lenguajes de programación declarativa más conocidos son:
* HTML
* CSS
* SQL

# data[].attributes.body
Primero entendamos el significado de Paradigma de programación, puede parecer algo difícil pero simplemente es una división de lenguajes en función de cómo funcionan. Existen principalmente 4 tipos de paradigmas:

Programación imperativa o procedimental

Programación declarativa

Programación lógica

Programación orientada a objetos

El paradigma declarativo expresa qué hacer.

El paradigma imperativo expresa cómo hacerlo.

En un lenguaje imperativo, declaramos todos y cada uno de los pasos que deben realizarse, como en C, donde vamos con el flujo lógico del programa y lo escribimos en pasos.

En lenguaje declarativo, simplemente especificamos lo que queremos y los lenguajes bajo el capó hacen el trabajo por nosotros y nos brindan el resultado. En SQL simplemente escribimos qué entradas necesitamos de una tabla y luego nos da directamente el resultado, no especificamos cómo debe buscar en una tabla o cualquier otra cosa.

# data[].attributes.body
•Investigar sobre las diferencias entre la programación imperativa y la programación declarativa.

# data[].attributes.body
Consignas

La programación declarativa es un paradigma que describe QUÉ hace el programa, sin especificar explícitamente su flujo de control.

La programación imperativa es un paradigma que describe CÓMO el programa debe hacer algo especificando explícitamente cada instrucción (o declaración) paso a paso, que muta el estado del programa.

Consignas

# data[].attributes.body
Declarativa : Programación orientada en lo que el programa quiere lograr.

Imperativa: Programación centrada en como se quiere lograr el objetivo

# data[].attributes.body
La programación imperativa, como su nombre indica, es un tipo de paradigma de programación que describe cómo se ejecuta el programa. Los desarrolladores están más preocupados por cómo obtener una respuesta paso a paso. Comprende la secuencia de imperativos de mando. En esto, el orden de ejecución es muy importante y utiliza datos tanto mutables como inmutables. Los lenguajes de programación Fortran, Java , C , C++ son ejemplos de programación imperativa.

La programación declarativa, como su nombre indica, es un tipo de paradigma de programación que describe qué programas se ejecutarán. Los desarrolladores están más preocupados por la respuesta que se recibe. Declara qué tipo de resultados queremos y deja el lenguaje de programación a un lado, enfocándose simplemente en descubrir cómo producirlos. En palabras simples, se centra principalmente en el resultado final. Expresa la lógica de la computación. Miranda, Erlang, Haskell, Prolog son algunos ejemplos populares de programación declarativa.

# data[].attributes.body
La programación imperativa es un tipo de paradigma de programación que describe cómo se ejecuta el programa.

La programación declarativa es un tipo de paradigma de programación que describe qué programas se ejecutarán.

# data[].attributes.body
¿Qué es la programación imperativa?

La programación imperativa es un método utilizado por los programadores de computadoras. Las declaraciones que se utilizan en este tipo de programación dan órdenes a la computadora para las acciones que se deben seguir. Esto es lo opuesto a la programación declarativa, que se usa para decirle a la computadora lo que debe hacerse sin dar detalles de cómo se deben tomar las acciones.

La programación imperativa se llamó así basándose en el modo imperativo utilizado en los lenguajes naturales frente a los lenguajes construidos, como los lenguajes de programación de computadoras. Durante la comunicación, el tiempo imperativo se usa para dar una orden directa a alguien. Estos comandos suelen exigir una acción particular de la audiencia que recibe el mensaje. El resultado de comando-acción del modo imperativo es la misma forma en que este tipo de programación funciona con computadoras.

¿Qué es la programación declarativa?

No hay consenso sobre la definición de este paradigma, pero todas las explicaciones coinciden en algo: lo que destaca de los lenguajes de programación declarativa es que siempre se describe el resultado final deseado, en lugar de mostrar todos los pasos de trabajo. Para alcanzar el objetivo, en la programación declarativa se determina automáticamente la vía de solución. Esto funciona siempre y cuando las especificaciones del estado final se definan claramente y exista un procedimiento de ejecución adecuado. Si se dan las dos condiciones, la programación declarativa es muy eficiente.

Como la programación declarativa no determina el “cómo”, sino que funciona a un nivel de abstracción muy alto, este paradigma deja margen para la optimización. Si se ha desarrollado un procedimiento de ejecución mejor, el algoritmo integrado lo encuentra y lo aplica. En este sentido, el paradigma está muy preparado para el futuro porque, al escribir el código, no es necesario determinar el procedimiento según el cual se alcanza el resultado.

# data[].attributes.body
Programación imperativa: damos instrucciones para conseguir un resultado. Nos centramos en el proceso/lógica que nos lleva a conseguir un resultado que perseguimos.

[ejemplos: Java, C, C++, Python, C# ...]

Programación declarativa: pedimos directamente lo que queremos obtener. No nos preocupamos tanto por el proceso que hay detrás de esas peticiones/órdenes.

[ejemplos: SQL, Haskell, Lisp, Erlang ...]

Programación declarativa vs imperativa – Styde.net

# data[].attributes.attachment_link.readable_text
Los lenguajes de programación suelen tener 2 formas:

IMPERATIVO: es decir, como una secuencia de operaciones a realizar.

DECLARATIVO: es decir, se especifica el resultado deseado, no cómo lograrlo.

Lenguajes como PHP, Python, JavaScript son IMPERATIVOS: especificamos la secuencia de operaciones utilizando condicionales o ciclos ( if, for, etc.)

Ejemplo de código imperativo

En el siguiente fragmento de código, vamos a comenzar declarando una lista de personas en la variable people. Cada persona será un objeto con 2 propiedades: nombre y edad ( name y age).

A continuación declararemos un segundo arreglo llamado kid_names, como el nombre lo indica, en este arreglo queremos almacenar nombres de niños (para este ejemplo consideraremos que un niño es una persona con una edad de 12 años o menos).

Luego, vamos a hacer un ciclo de todas las personas, dentro del ciclo verificaremos si la edad de cada persona ( person.age) es 12 o menos, de ser así, vamos a incluir el nombre de la persona ( person.name) en el arreglo kid_names utilizando el método Array.push provisto por JavaScript.

Finalmente, podremos observar el resultado con el método console.log de JavaScript:

var people = [
  {
    name: 'Aang',
    age: 12,
  },
  {
    name: 'Sokka',
    age: 15,
  },
  {
    name: 'Toph',
    age: 12,
  },
  {
    name: 'Iroh',
    age: 55,
  }
];


var kid_names = [];

for (let person of people) {
  if (person.age <= 12) {
    kid_names.push(person.name);
  }
}

console.log(kid_names);

Esta es la forma imperativa de programar, que describe lo que queremos lograr en términos de "cómo" hacerlo (con un loop y con un condicional) y en vez de "qué" queremos hacer (filtrar y transformar arreglos).

Un problema de esta manera imperativa es que nos anima a mezclar diferentes tareas en un solo lugar. Por ejemplo el ciclo hace dos cosas:

1. Filtra o excluye a personas de acuerdo a su edad (if (person.age...))

2. Agrega cadenas de nombres a un nuevo arreglo (kid_names.push(...))

Ejemplo de código declarativo

Lenguajes como SQL soportan otra manera de programar llamada Programación Declarativa.

Con ésta forma DECLARATIVA, especificamos lo que queremos obtener o hacer en lugar de cómo:

SELECT name FROM people AS kids WHERE age <= 12;

Si SQL fuese en español escribiríamos algo como:

SELECCIONE EL nombre DE personas COMO niños DONDE edad <= 12 años;

Obtenemos los nombres de las personas que tienen 12 años o menos "declarando" lo que queremos en lugar de escribir las operaciones para conseguir lo que queremos.

¿Cuál forma es mejor, imperativa o declarativa?

Ambas formas tienen sus ventajas y desventajas dependiendo del contexto, y es común desarrollar aplicaciones con una mezcla de lenguajes que soportan diversas formas de programar. Por ejemplo, es muy común desarrollar nuestro código backend con PHP pero manejando la base de datos con SQL. En el código frontend podemos usar JavaScript (imperativo) y CSS (declarativo).

Además, hay lenguajes y paradigmas que nos permiten pasar de una forma a otra:

Programación funcional: de imperativo a declarativo

La programación funcional nos permite escribir código declarativo en lenguajes imperativos. Para ello se suelen usar:

Funciones de orden superior

Una función de orden superior es una función (o método) que acepta otra función como argumento.

Array.filter y Array.map son dos ejemplos, ambos métodos aceptan una función como primer argumento y retornarán un nuevo arreglo. Esta es la sintaxis:

var un_nuevo_arreglo = arreglo_original.map_o_filter(funcion_callback);

Partiendo de un arreglo_original llamamos a map o a filter (entre otras funciones) pasando la funcion_callback como argumento y al final de la operación vamos a obtener un_nuevo_arreglo.

Veamos la sintaxis que deberíamos tener para nuestra funcion_callback:

function funcion_callback(item_de_un_arreglo) {
    // alguna operación con item_de_un_arreglo
    return resultado_de_la_operacion;
}

¿Qué es una función callback?

Una función callback es aquella que vamos a pasar como argumento a otra función (de orden superior). Esta función callback no se va a ejecutar en el momento que la pasamos como argumento sino después.

En el caso de funciones de orden superior como filter y map, la función callback se va a ejecutar para cada uno de los items en el arreglo y a su vez va a recibir dicho item como argumento. Ejemplo:

[1, 2, 3].map(function multiplyBy2(number) {

    var result = number * 2;

    console.log(result);

    return result;
});

Puedes ejecutar este código directamente en tu navegador:

1. Cópialo

2. Haz click con el botón derecho y selecciona "inspeccionar elemento"

3. Ve a la pestaña "Consola"

4. Pega el código allí y presiona "ENTER"

5. Deberás ver el siguiente resultado:

Puedes ver que la función multiplyBy2 se ejecutó 3 veces y que al final obtuvimos un nuevo arreglo con valores transformados.

Diferencia entre filter y map

Veamos la diferencia entre filter y map:

filter Si la función callback devuelve un valor verdadero, el item será incluido en el nuevo arreglo, de lo contrario no.

map retorna un nuevo arreglo cuyos valores serán lo que sea que retorne la función callback, permitiéndonos MAniPular los valores del arreglo original.

Ejemplo de programación funcional

Veamos el mismo ejemplo del principio pero escrito de forma funcional y declarativa:

Para trabajar con programación funcional necesitaremos... Funciones. Declaremos dos:

isAKid devolverá verdadero si la persona es un niño, falso de lo contrario. Recuerda que para nuestro ejemplo un niño tiene 12 o menos años de edad.

getName es lo que llamamos un "accessor", es decir una función que nos permitirá acceder y obtener una propiedad, en este caso el nombre de una persona.

function isAKid(person) {
  return person.age <= 12;
}

function getName(person) {
  return person.name
}

A continuación partiendo del arreglo people declarado en el ejemplo inicial, vamos a filtrarlo utilizando filter y la función callback isAKid:

 var only_kids = people.filter(isAKid);

Esto nos devolverá un arreglo con solo niños:

[
    { name: 'Aang', age: 12 },
    { name: 'Toph', age: 12 }
]

Pero nosotros queremos obtener solamente los nombres de los niños. Usemos map para ello:

var kid_names = only_kids.map(getName);

Map transforma el array de objetos en un nuevo array de nombres:

[ 'Aang', 'Toph' ]

Veamos todo el código de una sola vez:

var only_kids = people.filter(isAKid);
var kid_names = people.map(getName);

Debido a que people.filter(isAKid) retorna un arreglo, podemos encadenar el resultado de llamar al método filter junto al llamado al método map de una sola vez y sin el uso de variables intermedias:

var kid_names = people
    .filter(isAKid)
    .map(getName);

JavaScript también nos permite declarar funciones directamente en línea como argumentos de otras funciones, permitiéndonos así "unificar" todo el código:

var kid_names = people
    .filter(function isAKid(person) {
        return person.age <= 12;
    })
    .map(function getName(person) {
        return person.name
    });

JavaScript, así como otros lenguajes, nos permite declarar funciones de forma "anónima" (funciones sin nombre):

var kid_names = people
    .filter(function (person) {
        return person.age <= 12;
    })
    .map(function (person) {
        return person.name
    });

Nota que he eliminado los nombres de las funciones isAKid y getName; esto es posible si solo quiero llamar a mis funciones "en línea", puesto que no necesito que sean recordadas mediante un nombre o identificador.

JavaScript, a partir de ES6, incluye "Arrow Functions" que nos permiten lograr el mismo resultado, al menos en este ejemplo, pero con una sintaxis más corta ("Syntax Sugar"):

var kid_names = people
    .filter((person) => person.age <= 12)
    .map((person) => person.name);

El resultado es el mismo de antes, pero con menos caracteres. Según tu estilo personal puedes terminar prefiriendo la sintaxis más larga o más corta.

Conclusión

Usando funciones de orden superior como map y filter nos acercamos más a la forma DECLARATIVA donde indicamos qué queremos lograr (a través de métodos y operaciones predefinidas) en vez de cómo lograrlo. Es decir, reemplazando total o parcialmente la secuencia de operaciones que solemos definir a través de loops y condicionales.

Continua aprendiendo

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Programación funcional

# data[].attributes.attachment_link.description
Los lenguajes de programación suelen tener 2 formas: IMPERATIVO: es decir, como una secuencia de operaciones a realizar. DECLARATIVO: es decir, se especifica el resultado deseado, no cómo lograrlo. Lenguajes como PHP, Python, JavaScript son IMPERATIVOS: especificamos la secuencia de operaciones utilizando condicionales o ciclos ( if, for, etc.)

# data[].attributes.body
Programación imperativa:
- Lógica: PROLOG.
Basado en operadores lógicos básicos, AND, OR y en el estado de variables T o F.
Prolog examples (ohio-state.edu)

- Funcional: Haskell.
Se programa lo que se quiere hacer, sin lidiar con estados internos de las variables (funciones matemáticas puras).
Ejercicios de Haskell resueltos - Parte 1 - ▷ Cursos de Programación de 0 a Experto © Garantizados (unipython.com)

Programación funcional:
Vulgarmente, la programación que "todo el mundo conoce".
Programación estructurada, procedimental y modular.
Puede estar orientada a objetos: Java.
No orientada a objetos: C.

# data[].attributes.attachment_link.provider_name
▷ Cursos de Programación de 0 a Experto © Garantizados

# data[].attributes.attachment_link.title
Ejercicios de Haskell resueltos - Parte 1 - ▷ Cursos de Programación de 0 a Experto © Garantizados

# data[].attributes.attachment_link.description
En esta ocasión vamos a ver varios ejercicios de Haskell resueltos, sobre listas, usando el recorrido recursivo.

# data[].attributes.body
La diferencia entre la programación declarativa y la imperativa es que la programación declarativa se centra en lo que el programa debe lograr, mientras que la programación imperativa se centra en cómo el programa debe lograr el resultado.

Programación imperativa: cómo realizar una tarea
Programación declarativa: qué es lo que quieres hacer