Programación Funcional
Programación Funcional
Introducción
• Técnicas
• Recursividad
• Parámetros acumuladores
• CPS
• Mónadas
5
Familia LISP:
• Basados en s-expresiones
• Tipado débil
• Meta-programación
Familia ML:
7
Sólo existen valores y expresiones matemáticas que devuelven
nuevos valores a partir de los declarados.
En los lenguajes imperativos, sin embargo, se realizan
asignaciones que cambian el valor de una variable ya existente.
8
• En la programación declarativa no definimos cómo queremos
resolver un problema, sino que definimos cuál es el problema.
• En los casos en los que tengamos que crear nuestros propios
métodos podemos usar la programación funcional, que es
declarativa y por tanto nos puede ayudar a hacer nuestro
código más limpio.
9
Programación Funcional.
Definición:
“Functional programing”, ya lo sugiere, se centra en funciones.
La programación funcional es más relevante hoy
Está basado en modelos de cómputo cálculo lambda y lógica
combinatoria
Funciones Lambda:
• No necesita ser declarada más que donde va a ser llamada
• No tiene nombre
Facilita la programación funcional 10
• Tiene amplias opciones de transformación algebraica de
programas
• Sencillas opciones de análisis semántico al renunciar a los
efectos secundarios
• Desaparición de estados internos, a diferencia de la
programación imperativa
• Función de Orden superior, ya que toma argumentos de otras
funciones y las puede retornar como el resultado de su 11
ejecución.
Por último, podemos decir de la programación funcional se
ve enriquecida por estos dos grandes puntos, que al parecer
sencillos son los cimientos de este paradigma.
Al contar con un alto grado de abstracción ya que está
basado en el principio matemático y el de función
Al aplicarse de manera correcta nos brinda un código más preciso.
12
Lisp
15
La programación funcional es un paradigma declarativo, es decir nos enfocaremos en
que estamos haciendo y no en como se esta haciendo, también es enfoque
imperativo esto quiere decir que nosotros estaremos utilizando nuestra lógica, sin
escribir controles de flujo, no se puede usar ciclos o condiciones, veamos un ejemplo
utilizando la programación funcional.
//imperativo
Inicio
Entero contador=0
Para numero=1 hasta numero=8
Contador = contador + numero
Fin para
Imprimir contador
16
//con función
Entero función suma()
Inicio
Volver (8*(8+1))/2
Fin
Como podemos darnos cuenta es mas fácil y legible programar con funciones estos
códigos, primero se filtra y posteriormente se suma.
La programación funcional no es nada mas que un paradigma de programación, es
decir, es una forma por la cual podemos resolver diferentes problemáticas.:
Imperativo
Int contador = 0;
For(int numero : numeros)
{
If(numero > 10) {
Contador ++;
}
}
System.out.println(contador);
17
//Declarativo
Long resultado = números.stream().filter(n -> n > 10).count();
System.out.println(resultado);
18
boolean hasRed = false;
for (String color : colors) {
if (color.equals("red")) {
hasRed = true;
break;
}
}
System.out.println("Has color red? " + hasRed);
19
Actualmente contamos con una gran cantidad de lenguajes en donde podemos
hacer uso de la programación funcional, por ejemplo :
Java
PHP
Ruby
Python
Elixir
Kotling
Haskell 20
Erlang
Muchos de estos lenguajes no están cien por ciento enfocados
en la programación funcional, lo cual no es malo, de hecho,
estos nos permite hacer una transición de un paradigma a otro,
comúnmente de la programación orientada a objetos ha
programación funcional.
CONCLUSIÓN
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
21