You are on page 1of 3

Paradigma de programacin funcional

Utilidad
El objetivo es conseguir lenguajes expresivos y matemticamente
elegantes, en los que no sea necesario bajar al nivel de la mquina para
describir el proceso llevado a cabo por el programa, y evitar el concepto de
estado del cmputo. La secuencia de computaciones llevadas a cabo por el
programa se rige nica y exclusivamente por la reescritura de definiciones
ms amplias a otras cada vez ms concretas y definidas, usando lo que se
denominan "definiciones dirigidas".

Caractersticas
Transparencia referencial.
Al no haber variables, no hay efectos laterales, es decir, al ejecutar la
funcin (aunque ya hemos visto que el concepto de ejecutar no existe como
tal) no cambiar nada fuera del entorno de sta. Tampoco depender para
nada de lo que haya en ese entorno. Se dice que una funcin tiene
transparencia referencial si, para un valor de entrada, produce siempre la
misma salida. En programacin funcional esto es siempre as por definicin.
Evaluacin perezosa (Lazy evaluation).
Para una mente acostumbrada a lo imperativo esto cuesta de entender, as
que atencin. Al no tener que seguir una serie de rdenes, una tras otra,
algunos los lenguajes funcionales slo evalan lo que les es requerido en
cada momento. Esto permite cosas como el cdigo Haskell take, que
significa coger los cinco primeros nmeros de una lista infinita de nmeros
empezando por el 1. En un lenguaje imperativo, esto llevara a un bucle
infinito mientras se genera la lista. En Haskell, slo se genera lo que se
necesita; en este caso, los cinco primeros nmeros. Esto puede redundar en
una ejecucin ms eficiente y un cdigo ms claro y cercano al matemtico.
Altsima abstraccin.
Los lenguajes funcionales implementan muchsimos mecanismos de
abstraccin que te hacen la vida muy, muy feliz. Un brutal sistema de tipos
de datos, polimorfismo en muchos niveles, y un montn de nuevos
conceptos como funciones de orden superior, functores, mnadas Las
inevitables operaciones que no son puramente funcionales, como la
entrada/salida o los nmeros aleatorios, quedan envueltos en abstracciones
que resuelven la papeleta con elegancia.
Elegancia, legibilidad, flexibilidad.

Por lo general, cuanto ms abstracto es un lenguaje, ms se potencian estas


caractersticas, por lo que los programas funcionales suelen ser ms claros,
ms concisos y ms bellos que sus contrapartidas en lenguajes imperativos
(incluso en preciosidades como Python o Ruby). El cdigo ms artstico que
he visto nunca, con diferencia, est en Haskell. Adems, la ausencia de
entorno y de estado permite que, si ests leyendo una funcin, slo tengas
que retener en tu cabeza esa funcin, sin preocuparte de ms. Esto facilita
adems

Facilidad para las pruebas y la depuracin.


Gracias a la transparencia referencial, hacer unit testing en lenguajes
imperativos es trivial. Adems, el alto nivel hace que los errores lo tengan
difcil para esconderse por el cdigo, por lo que suelen salir programas muy
fiables.
http://www.genbetadev.com/paradigmas-de-programacion/programacionfuncional-un-enfoque-diferente-a-los-problemas-de-siempre

Funciones de orden superior


Otra de las caractersticas comunes de los lenguajes funcionales es tratar a
las funciones como ciudadanos de primera clase. Es decir, las funciones
son valores ms o menos normales que se pueden pasar como parmetros,
asignar a variables y devolver como resultado de la llamada a una funcin.
Las funciones que utilizan esta caracterstica, es decir, que manipulan o
devuelven funciones, reciben el nombre de funciones de orden superior.
Afortunadamente, muchos lenguajes populares tienen este tipo de
funciones.

La primera vez que uno se encuentra funciones de orden superior puede


pensar que sus usos son limitados, pero realmente tienen muchas
aplicaciones. Por un lado, tenemos las funciones y mtodos que traiga el
lenguaje de serie, por lo general de manejo de listas. Por otro, tenemos la
posibilidad de escribir nuestras propias funciones y mtodos de orden
superior, para separar o reutilizar cdigo de manera ms efectiva.

Funcin pura
Funciones y expresiones puras: Como este paradigma evita los efectos
colaterales permite eliminar expresiones sin temer a que esto pueda afectar
a otra cosa, garantiza que si una funcin es llamada con ciertos argumentos

el valor de retorno ser siempre el mismo, elimina la dependencia de datos,


etc.
Una forma muy rpida y poco precisa de definir a las Funciones Puras sera
decir que son aquellas que operan utilizando solo los parmetros de entrada
sin recurrir a ningn otro elemento fuera de ellas.
De la anterior aproximacin, podemos derivar fcilmente -y de un modo ya
formal- una definicin ms acadmica:
En programacin, las Funciones Puras son aquellas que cumplen con dos
requisitos bsicos:
-Dado unos parmetros de entrada de idntico valor, la funcin siempre
devolver el mismo resultado.
-El cmputo de la funcin, su lgica, no implica ningn efecto observable
colateral fuera de ella.

Recursividad
Las funciones recursivas son aquellas que se invocan a s mismas en algn
momento de su ejecucin. En anlisis de Algoritmos las tcnicas recursivas
se usan mucho para la solucin de Problemas. Esta forma en anlisis de
Algoritmos es llamada "divide y vencers". Para poder resolver un problema
de forma recursiva es necesario saber alguna solucin no recursiva para
alguno de los casos ms sencillos. "Usamos la solucin ms simple para
resolver un problema ms complejo" As, todo mtodo recursivo debe tener
al menos una sentencia que devuelva un resultado (la solucin del caso ms
sencillo) y las sentencias necesarias para acercarse en cada invocacin a
ese caso. La recursin permite programar algoritmos aparentemente
complicados con un cdigo simple y claro, ahorrando trabajo al programador

Evaluacin estricta y no estricta


Cada lenguaje funcional puede tener dos formas de evaluar. La estricta
evala cada funcin antes de ejecutar mientras que la no estricta, tambin
conocida como lazy, solo evala en caso de ser necesario.
La diferencia tcnica est en la notacin semntica de las expresiones que
contienen clculos fallidos o divergentes. Bajo la evaluacin estricta, la
evaluacin de cualquier trmino que contenga un sub-trmino fallido har
que este sea de por s fallido.

You might also like