0% encontró este documento útil (0 votos)
37 vistas6 páginas

Programacion Funcional Paradigma

Cargado por

yisuus200328
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 DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
37 vistas6 páginas

Programacion Funcional Paradigma

Cargado por

yisuus200328
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 DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 6

PROGRAMACIÓN FUNCIONAL

DEFINICIÓN
Según (Joroen F, 1996), “La programación funcional es un paradigma de programación que
trata de tratar la computación como una evaluación de funciones matemáticas y evitar
cambiar estados y datos mutables. En la programación funcional, los programas se
componen principalmente de funciones puras, que son funciones que siempre producen el
mismo resultado dado el mismo conjunto de entradas y no tienen efectos secundarios
observables.La programación se hace con expresiones por lo cual se puede considerar un
paradigma declarativo.Lo principal en la programación funcional radica en la salida de los
valores de una función que dependen únicamente en los argumentos de entrada. Algunos
de los conceptos clave en la programación funcional incluyen:

● Funciones puras: En programación funcional, las funciones son puras, lo que


implica que para un conjunto específico de entradas, siempre generarán el mismo
resultado y no tendrán impacto adicional..
● Inmutabilidad: En programación funcional, las funciones son puras, lo que implica
que para un conjunto específico de entradas, siempre generarán el mismo resultado
y no tendrán impacto adicional.
● Recursión: La recursión es un concepto clave en la programación funcional. En vez
de depender de bucles, los problemas se abordan mediante funciones recursivas, es
decir, funciones que se invocan a sí mismas con argumentos modificados en cada
llamada.
● Funciones de orden superior: Las funciones son consideradas ciudadanos de
primera clase y tienen la capacidad de ser pasadas como argumentos a otras
funciones o de ser retornadas como valores de otras funciones. Las funciones que
aceptan una o más funciones como argumentos y/o devuelven funciones se
denominan funciones de orden superior.
● Programación declarativa: En la programación funcional, en vez de detallar el flujo
de control y los pasos específicos para llevar a cabo una tarea, se describe el
objetivo que se quiere alcanzar. Se confía en que el lenguaje de programación se
encargue de los detalles internos para lograr ese objetivo.”

¿QUE ES UNA FUNCIÓN EN LA PROGRAMACIÓN FUNCIONAL?


Como opina (Fabio Augusto G. 1994), “En el paradigma de la programación funcional, una
función representa un conjunto de instrucciones que toman uno o más valores como
entrada, ejecutan operaciones basadas en estos valores y devuelven un resultado
específico. En este contexto, las funciones obedecen reglas matemáticas: para un conjunto
particular de entradas, siempre producirán el mismo resultado y no tendrán efectos
secundarios visibles fuera de la función.
En la programación funcional, las funciones son tratadas como elementos fundamentales, lo
que significa que pueden manipularse de la misma manera que otros tipos de datos. Esta
característica permite pasar funciones como argumentos a otras funciones (funciones de
orden superior) y devolver funciones como valores de otras funciones. Las funciones de
orden superior son esenciales en la programación funcional, ya que posibilitan la creación
de abstracciones complejas y expresivas.
Las funciones en la programación funcional cumplen con dos características clave:
Purificación: Una función pura es aquella que, dado el mismo conjunto de entradas,
siempre devolverá el mismo resultado y no tendrá efectos secundarios observables. Los
efectos secundarios incluyen cualquier modificación de datos fuera de la función, como la
modificación de variables globales o la impresión en la consola.
Transparencia Referencial: La transparencia referencial es una propiedad que establece
que una expresión que se evalúa a una función pura puede ser reemplazada por su valor
sin cambiar el comportamiento del programa. En otras palabras, si tienes una función pura
llamada con ciertas entradas, puedes reemplazar la llamada a esa función con su resultado
sin afectar el programa.
Funciones Recursivas de Cola (Tail-Call Optimization): En algunos lenguajes de
programación funcional, se optimizan las llamadas recursivas de cola, lo que significa que
estas llamadas no consumen espacio adicional en la pila de llamadas. Esto permite la
recursión sin el riesgo de desbordamiento de pila, lo que es crucial para problemas que
involucran numerosas llamadas recursivas.
Pureza en la Práctica: A pesar de que es ideal tener funciones puras en programación
funcional, en la práctica, a veces es necesario interactuar con el entorno exterior y llevar a
cabo operaciones impuras como entrada y salida de datos. Los lenguajes funcionales
ofrecen mecanismos para manejar estas situaciones, como las monads en Haskell y
técnicas de manejo de efectos en lenguajes como Scala y F#.
Composición de Funciones: La composición de funciones es una técnica donde puedes
combinar múltiples funciones para formar una nueva función. Esto se logra al pasar el
resultado de una función como entrada a otra función.
Programación Funcional en Lenguajes Híbridos: Muchos lenguajes modernos, como
JavaScript, Python y Java, han incorporado características de programación funcional en
sus últimas versiones. Esto permite a los desarrolladores combinar enfoques funcionales
con paradigmas de programación más tradicionales, lo que otorga flexibilidad y poder al
escribir código.
Librerías y Frameworks Funcionales: Existen librerías y frameworks específicamente
diseñados para la programación funcional en diversos lenguajes. Ejemplos incluyen Ramda
y Lodash-FP en JavaScript, y Cats y Scalaz en Scala. Estas herramientas proporcionan
utilidades y funciones que simplifican la escritura de código funcional.”
Es importante tener en cuenta que la programación funcional es un enfoque flexible y
potente que se puede aplicar en diversos entornos y lenguajes de programación. Un
conocimiento profundo de sus conceptos y métodos puede tener un impacto positivo en la
calidad y claridad del código.

APLICACIONES DE LA PROGRAMACIÓN FUNCIONAL


Según (Programación funcional, s. f.), “La programación funcional es un paradigma de
propósito general, pero se destaca especialmente en las siguientes áreas:
Implementación de lenguajes de programación. Si alguna vez ha escrito un compilador o
interprete, estos están generalmente divididos en varias etapas, de las cuales muchas
toman una estructura tipo árbol, la procesan de alguna forma y retornan una nueva
estructura tipo árbol. Este tipo de procesos pueden ser expresados de forma más clara en
lenguajes funcionales ( Características como "pattern-matching" y muy buen soporte para
recursión eficiente, lo cual hace más fácil trabajar con árboles), permitiendo desarrollar
compiladores consistentes.
Concurrencia y sistemas paralelos. Las restricciones de no mutación en lenguajes
funcionales generalmente permite que muchos procesos accedan y compartan los mismos
datos alentando un diseño "embarrassingly parallel", donde diferentes hilos de ejecución no
necesitan comunicarse entre sí para procesar la información. En Haskell (por lo menos el
subset seguro) el tipo sistema permite que el compilador sepa cuáles partes del programa
puedan ser automáticamente paralelizados, al menos en teoría, lo cual es una ventaja
potencial.
Sistemas altamente seguros. Los lenguajes funcionales fuertemente tipados,
particularmente Haskell, son muy claros en las garantías de lo que el programa puede y no
puede hacer. Los lenguajes de asistencia de pruebas, como Coq, que normalmente son
muy semejantes a los lenguajes funcionales, pueden proveer pruebas arbitrarias básicas de
los programas que se escriben en ellos. INRIA escribió un compilador -probablemente
correcto- de C en Coq y OCaml. Por ejemplo, lo más impresionante de todo, además de que
se ha demostrado que el proyecto está libre de bugs y esto sea escalable, es que el
desempeño del código generado es muy respetable.
Algunos ejemplos de aplicaciones concretas:
1. Sigma (Fighting spam with Haskell)
Sigma es un sistema que usa facebook para identificar de forma pro-activa acciones
maliciosas en las interaciones de sus usuarios, las cuales incluyen spam, ataques de
phising, links a malware entre otros. El contenido detectado por Sigma es removido de
forma automática y así evitando que aparezca en los post del usuario.
2. Jane Street
Es una firma de trading que opera alrededor del mundo, ellos implementan la mayoría de
sus sistemas en ocaml, expresan que esto les permite maximizar la productividad de sus
empleados. Además aportar en varios proyectos opensource.
3. QuickCheck
QuickCkeck es una librería en haskell para la generación de pruebas aleatorias en donde se
busca probar las propiedades que deberían de cumplir las funciones implementadas.
El programador provee la especificación del programa, en forma de propiedades que la
función debería satisfacer, la librería entonces genera una gran cantidad de casos de
prueba aleatorios para probar que la función cumpla su cometido.
4. WhatsApp - ERLANG
Este lenguaje se caracteriza por aplicar tanto programación funcional como concurrente.
Fue diseñado para tener un enfoque hacia las aplicaciones distribuidas y tolerantes a fallos.
Dentro de sus características principales encontramos la capacidad de proporcionar cambio
en caliente de código. Estas propiedades lo han hecho útil dentro del campo de las
telecomunicaciones, razón por la cual empresas como WhatsApp y T-Mobile lo han usado
dentro del desarrollo de algunos de sus proyectos.
5. LOLITA
En la universidad de DURHAM Inicialmente usaron Miranda y luego pasaron a Haskell,
desarrollando un proyecto de siete años para construir LOLITA(Large-scale, Object-based,
Linguistic Interactor, Translator, and Analyser), un programa de 30.000 líneas para la
comprensión de lenguaje natural.”
PRINCIPALES LENGUAJES DE LA PROGRAMACIÓN FUNCIONAL
Según (Programación funcional, s. f.), “A continuación se mencionan y se dará una breve
introducción con algunos ejemplos de lenguajes que implementan características del
paradigma de programación funcional:
SCALA
Es un lenguaje de programación multi-paradigma diseñado para expresar patrones
comunes de programación que integra características de lenguajes funcionales y orientados
a objetos. La implementación actual corre en la máquina virtual de Java y es compatible con
las aplicaciones Java existentes. En Scala las funciones son valores de primera clase,
soportando funciones anónimas, orden superior, funciones anidadas y currificación. Scala
viene integrado de fábrica con la técnica de pattern matching para modelar tipos algebraicos
usados en muchos lenguajes funcionales.
SCHEME
Es un lenguaje funcional (si bien impuro pues sus estructuras de datos no son inmutables) y
un dialecto de Lisp. Fue desarrollado por Guy L. Steele y Gerald Jay Sussman en la década
de los setenta e introducido en el mundo académico a través de una serie de artículos
conocidos como los Lambda Papers de Sussman y Steele. La filosofía de Scheme es
minimalista. Su objetivo no es acumular un gran número de funcionalidades, sino evitar las
debilidades y restricciones que hacen necesaria su adición. Así, Scheme proporciona el
mínimo número posible de nociones primitivas, construyendo todo lo demás a partir de un
reducido número de abstracciones. Las listas son la estructura de datos básica del lenguaje,
que también ofrece arrays entre sus tipos predefinidos. Debido a su especificación
minimalista, no hay sintaxis explícita para crear registros o estructuras, o para programación
orientada a objetos, pero muchas implementaciones ofrecen dichas funcionalidades.
JavaScript
Si bien JavaScript no es un lenguaje funcional puro, por medio del uso de algunos
conceptos, prácticas y librerías que nos permiten emplear este paradigma:

● Asegurar la inmutabilidad de los datos con los que trabaja tu aplicación.


● Uso de funciones de orden superior.
● Uso del currying.
● Composición de funciones.
JavaScript permite la declaración de funciones puras muy fácilmente por medio del
comando function. Las funciones de orden superior map, filter y reduce, son los pilares de la
programación funcional en JavaScript. La composición de funciones es muy similar al
manejo de java, con la notación punto.
La programación funcional en JavaScript es muy útil pues previene la creación de efectos
colaterales en los datos de las aplicaciones.
Haskell
Es un lenguaje de programación estandarizado multi-propósito puramente funcional con
semánticas no estrictas y fuerte tipificación estática. Su nombre se debe al lógico
estadounidense Haskell Curry. En Haskell, "una función es un ciudadano de primera clase"
del lenguaje de programación. Como lenguaje de programación funcional, el constructor de
controles primario es la función. El lenguaje tiene sus orígenes en las observaciones de
Haskell Curry y sus descendientes intelectuales. Las características más interesantes de
Haskell incluyen el soporte para tipos de datos y funciones recursivas, listas, tuplas,
guardas y calce de patrones.
CLOJURE
Es un lenguaje de programación de propósito general que maneja el dialecto de Lisp, está
enfocado en el paradigma funcional y fue diseñado con el fin de eliminar la complejidad de
la programación concurrente, se puede ejecutar sobre la máquina virtual de Java, la
máquina de la de la plataforma .NET o compilado a JavaScript. Este lenguaje usa una
gestión de referencias que pueden ser actualizadas aplicando funciones previas al estado
actual, permitiendo un enfoque al cambio de estado de la programación imperativa
promoviendo el uso de funciones puras como mejor forma de realizar cálculos. Fue
diseñado por Rich Hickey, quien describe el desarrollo de Clojure como la búsqueda de un
lenguaje funcional como el Lisp, pero por defecto, que estuviera integrado sobre un entorno
robusto en lugar de ser su propia plataforma y que eliminara la programación concurrente.
Así mismo rechaza por completo el paradigma de los objetos, expresando los programas
como aplicación de funciones sobre datos más que sobre interacción entre entidades.
OCaml
Objective CAML, su etimología proviene de las siglas Objective Categorical Abstract
Machine Language. Es un lenguaje de programación avanzado de la familia ML,
desarrollado por INRIA en Francia, admite varios paradigmas, entre ellos el funcional. Nace
de la evolución del lenguaje CAML, al integrarse la operación con objetos. El código en
Ocalm, se compila en código para una máquina virtual o en código de máquina para
diferentes arquitecturas que permiten una eficiencia comparable con la producida por
lenguajes como C o C++.”
REFERENCIAS BIBLIOGRÁFICAS

Programación funcional. (s. f.).


https://ferestrepoca.github.io/paradigmas-de-programacion/progfun/funcional_teoria/
applications.html

Joroen Fokker(1996, 3 febrero) Programacion Funcional , Programa MEMI


https://ima.udg.edu/~villaret/fp-sp.pdf

Fabio Augusto G.(1994, 5 de marzo). Programacion Funcional: Conceptos y Perspectivas,


EditUNC
https://www.academia.edu/13432608/PROGRAMACION_FUNCIONAL_CONCEPTOS_y_P
ERSPECTIVAS

¿Qué es la programación funcional? (s. f.). CódigoFacilito.


https://codigofacilito.com/articulos/programacion-funcional

Fernández, P. (2023, 27 abril). Qué es la programación funcional y sus características.


OpenWebinars.net. https://openwebinars.net/blog/que-es-la-programacion-funcional-y-sus-
caracteristicas/

Equipo editorial de IONOS. (2020, 11 febrero). Programación funcional: ideal para


algoritmos. IONOS Digital Guide. https://www.ionos.es/digitalguide/paginas-web/desarrollo-
web/programacion-funcional/

También podría gustarte