UTNianos

Versión completa: [Paradigmas]¿Qué es declaratividad?
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Ok, el concepto más importante y el que más me cuesta.

Mis queridos ayudantes paradigmáticos que andan dando vueltas por el foro. Sólo encontré una solución entendible (la de Imakuni) que me ayudó un poco a definir formalmente qué es declaratividad.

Alguien más podrá ayudarme? Se agradecen las intenciones =)
Hola!

No soy ayudante de paradigmas pero estoy preparando el final para este sábado jajaj, escribo más o menos lo que se:

Una solución es más declarativa que otra cuando tiene menos detalle sobre el algoritmo, y se delega al motor la manera de resolver (y a uno no le interesa de qué manera el motor lo termina resolviendo).

Es decir, uno al ser declarativo se centra en el "qué" y no en el "cómo".

Cuánto menos detalle algorítmico tiene la solución, más declarativa es.

A ver por ejemplo, si tenemos el siguiente requerimiento: "dada una lista de números filtrar los que son pares".

Si lo pensamos en un lenguaje imperativo, la solución en pseudocódigo sería algo así:

(partiendo de la base de que tenemos un vector con número cargados por ejemplo)

contador2:=0

for i=1 to finVector
if (vector[i] mod 2 = 0) {vectorConLosPares[contador2]:=vector[i]; contador2:=contador2 + 1}


Sería una cosa medio engorrosa, y como programadores le tenemos que dar mucha bola al algoritmo, manejando contadores, y estructuras de bajo nivel.

En cambio si lo pensamos en un lenguaje del paradigma funcional como Haskell, la solución es esta:

pares unaLista = filter even unaLista

ó

pares unaLista = [x | x<-unaLista, even x]


Como podés notar, la solución en Haskell, es mucho más declarativa que la solución en un lenguaje imperativo.

A mi no me importa cómo el motor de Haskell termina resolviendo el filter o la lista por comprensión en el segundo caso. Seguramente haya enmascarados muchos contadores, saltos condicionales, y demás cosas de bajo nivel, pero a mi no me interesa.



Espero que te haya servido!!
Gracias, muchas gracias Guidok.

Si vas el sábado de seguro nos vamos a encontrar allá =)

(lo de ayudantes iba para los que ayudan, no para los que ejercen como ayudantes en la facu, je =) )
URLs de referencia