0% encontró este documento útil (0 votos)
10 vistas28 páginas

Clase ProgramacionFuncional

El documento aborda la programación funcional, sus orígenes, características y beneficios en comparación con otros paradigmas. Se destaca la importancia de la programación funcional en la concurrencia y la manipulación de flujos de datos, así como su enfoque en funciones puras y la recursividad. Además, se mencionan lenguajes que implementan este paradigma y sus aplicaciones en el desarrollo de software eficiente y legible.

Cargado por

ronaldgaibor19
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
10 vistas28 páginas

Clase ProgramacionFuncional

El documento aborda la programación funcional, sus orígenes, características y beneficios en comparación con otros paradigmas. Se destaca la importancia de la programación funcional en la concurrencia y la manipulación de flujos de datos, así como su enfoque en funciones puras y la recursividad. Además, se mencionan lenguajes que implementan este paradigma y sus aplicaciones en el desarrollo de software eficiente y legible.

Cargado por

ronaldgaibor19
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 28

PROGRAMACIÓN

FUNCIONAL
LENGUAJES DE PROGRAMACIÓN
OBJETIVO

• Contrastar el diseño de los lenguajes de programación,


subprogramas, concurrencia de procesos y sus paradigmas,
identificando sus características y similitudes para el desarrollo
de soluciones computacionales.
• Orígenes
• Paradigmas
• Características
• Lenguajes de Programación
• Ejercicio
Orígenes de los Paradigmas
• Raíces teóricas, antes de aparecer los ordenadores.
• 1930s: Alan Turing, Alonzo Church, Stephen Kleene, Emil
Post, etc.
• Turing: Máquina de Turing, programación imperativa
• Kleene y Post: métodos abstractos, sustituciones
algebraicas
• Church: Cálculo lambda, programación funcional
• Modelo de cálculo lambda basado en la definición de
funciones y la aplicación de estas funciones a
argumentos
Primeras aplicaciones
• La programación funcional apareció como un paradigma
independiente a principio de los 70.

• Su creación es debida a las necesidades de los


investigadores en el campo de la inteligencia artificial y en
sus campos secundarios del cálculo simbólico, pruebas de
teoremas, sistemas basados en reglas y procesamiento del
lenguaje natural.

• Estas necesidades no estaban cubiertas por los lenguajes


imperativos de la época
Programación declarativa
• La programación declarativa es en la actualidad, el paradigma
dominante de un conjunto de dominios diversos y extensivos
como: bases de datos, plantillas y gestión de configuración.

• En pocas palabras, programación declarativa consiste en decirle


a un programa lo qué tiene que hacer en lugar de
decirle cómo debería hacerlo. En la práctica, este enfoque
significa implica proporcionar un lenguaje específico de dominio
(DSL, del inglés Domain-specific language) para expresar
lo qué el usuario quiere y resguardarlos de las arquitecturas o
construcciones de bajo nivel (bucles, condicionales,
asignaciones) que materializan el estado final deseado.

Tomado de: https://www.toptal.com/software/la-programacion-declarativa-de-verdad-existe


Programación funcional
• La programación funcional intenta tratar el problema de
la programación desde un punto de vista matemático,
utilizando la noción de función como base para la
construcción de los algoritmos y estructuras de datos.

• En un sentido estricto, la programación funcional define


un programa como una función matemática que
convierte entradas en salidas, sin estado interno ni
efectos laterales.
Cálculo de Lambda
• Fue concebido originalmente por el lógico-matemático Alonzo
Church en los años 30 como parte de una teoría general para
modelar funciones y lógica de orden superior.

• Los LP funcionales están descritos como un λ- Cálculo extendido. En


este formalismo los algoritmos se expresan mediante funciones
matemáticas en las que puede ser usada la recursión.

• Las últimas versiones de Java ya incluyen expresiones lambda, igual


que C# hace mucho tiempo. Cada versión de C# incluye más
características funcionales; Javascript, Ruby, Python y Go, también
son lenguajes que han incorporado algunas características
funcionales.
Características
• Su objetivo es emular las funciones matemáticas lo más
parecido posible.
• La programación funcional pura no usa variables ni
asignaciones.
• Repetición o iteración se realiza a través de la recursión.
• Funciones como datos primitivos.
• Un programa consiste de declaración de funciones y
aplicaciones de ellas.
• Definen tipo closure, una función que dentro de ella,
definen otra función y la retorna al ser invocado.
Importancia
• Una de las razones es que las aplicaciones son cada vez más
difíciles de ejecutar en una sola máquina. Cada vez es más
necesario poder soportar grandes dosis de concurrencia y
paralelismo.

• La programación de sistemas concurrentes, con múltiples


hilos de ejecución o con múltiples computadores ejecutando
procesos conectados concurrentes.

• La definición y composición de múltiples operaciones sobre


streams de forma muy concisa y compacta, aplicable a la
programación de sistemas distribuidos en Internet.

• La programación interactiva y evolutiva.


Beneficios
• La programación funcional no usa la mutación (no se
modifican los valores asignados a variables ni
parámetros). Esta propiedad lo hace un paradigma
excelente para implementar programas concurrentes,
en los que existen múltiples hilos de ejecución.

• La programación de sistemas concurrentes es muy


complicada con el paradigma imperativo tradicional, en
el que la modificación del estado de una variable
compartida por más de un hilo puede provocar
condiciones de carrera y errores difícilmente localizables
y reproducibles.
Beneficios
• El paradigma funcional ha originado un estilo de
programación sobre streams de datos (argumentos), en
el que se concatenan operaciones como filter, map,
reduce para definir de forma sencilla procesos y
transformaciones asíncronas aplicables a los elementos
del stream. (funcion_AO funcion datos)

• Este estilo de programación ha hecho posible nuevas


ideas de programación, como la programación
reactiva, basada en eventos, o los Future o promesas
muy utilizados en lenguajes muy populares como
JavaScript, Dart para realizar peticiones asíncronas a
servicios web.
Lenguajes funcionales

• Clojure
• LISP
• Haskell
• Common Lisp
• Scheme
• R (estadística)
• Python (multiparadigma)
• Java (multiparadigma)
• Javascript(multiparadigma)
Formas funcionales
• Reciben funciones como parámetros, o entregan
funciones como resultado.
• Por ejemplo:
Tipos de Funciones

• Simples
• Anónimas
• Alto Orden
o Reciben una función
o Retornan una función
Dependiendo del LP existen: map, filter, reduce,
etc.
• Primera clase, closure
• Puras –> sin efectos secundarios
Tipos de Funciones
• Anónimas

Las funciones
anónimas son aquellas
que no tienen un
nombre. Se suelen usar
para tareas simples y
que no requieren ser
reutilizadas en el
código.
Tipos de Funciones
• Closure

Un closure es una función


que captura variables de su
entorno léxico, permitiendo
que las funciones internas
recuerden y accedan a
variables del ámbito en el
que fueron creadas, incluso
después de que el ámbito
externo haya finalizado.
Tipos de Funciones
• Alto Orden

Las funciones de alto orden son aquellas que pueden


recibir otras funciones como argumentos, o bien,
devolverlas como resultado.
Tipos de Funciones
Tipos de Funciones
• Primera Clase

Las funciones de primera clase son aquellas que se tratan


como cualquier otra variable, lo que significa que se
pueden asignar a variables, pasarse como argumentos a
otras funciones, o devolverse como valores desde otras
funciones.
Comparación
• El enfoque imperativo permite al desarrollador escribir código que
describe detalladamente los pasos que el equipo debe realizar para
cumplir el objetivo. Por el contrario, un enfoque funcional implica
crear el problema como un conjunto de funciones que se deben
ejecutar.
Aplicaciones
Manipulación de flujos de datos en tiempo real, como
procesamiento de logs o eventos de usuario.

Justificación: Las funciones de alto orden como map, filter,


y reduce permiten transformar y reducir flujos de datos de
manera concisa y eficiente, manteniendo el código limpio
y fácil de razonar.
Aplicaciones
Implementación de algoritmos distribuidos como
MapReduce.

Justificación: La separación clara entre funciones puras e


impuras, junto con la inmutabilidad, permite una fácil
paralelización y distribución de tareas sin preocupaciones
de estados compartidos o sincronización.
Aplicaciones
Optimización de consultas a bases de datos mediante
técnicas de memoización y transformación de consultas.

• Justificación: La memoización y las transformaciones de


funciones, características típicas del paradigma
funcional, pueden ser utilizadas para mejorar la
eficiencia de las consultas, eliminando redundancias y
pre-procesamiento resultados.
Aplicaciones
Desarrollo de aplicaciones donde las interfaces de usuario
reaccionan automáticamente a cambios en los datos
subyacentes.

Justificación: La capacidad de las funciones puras para ser


fácilmente combinadas y transformadas permite la
creación de flujos de datos reactivos que se pueden
manejar de manera declarativa y modular.
Aplicaciones
Construcción de interfaces declarativas para bibliotecas
gráficas o UI.

Justificación: La programación funcional permite expresar


de manera clara y concisa las intenciones del desarrollador
mediante funciones puras y composiciones, lo que se
traduce en APIs más fáciles de entender y mantener.
Resumen
• En este paradigma se debe evitar el uso de variables y su
mutación para evitar cambios de estado y generación de
errores.
• Uso de la recursividad en reemplazo de las iteraciones (for,
while)
• Analizar el diseño del subprograma y describirlo, identificar los
datos de entrada a cada función y qué valor o función debe
retornar.
• La programación funcional nos permitirá desarrollar software
mucho más legible y fácil de testear, nos concentramos en
qué estamos haciendo y no en cómo se esta haciendo.
• Este paradigmas es muy útil para problemas complejos.
Revisar para los retos
• Clojure: https://medium.com/@priya104/map-filter-
reduce-abaf8508ab37
• R: https://helloacm.com/r-programming-tutorial-map-
reduce-filter-and-lambda-examples/
• Javascript: https://medium.com/poka-techblog/simplify-
your-javascript-use-map-reduce-and-filter-bd02c593cc2d
• Dart: https://codeburst.io/top-10-array-utility-methods-
you-should-know-dart-feb2648ee3a2
• Python:
https://book.pythontips.com/en/latest/map_filter.html

También podría gustarte