• Barajar
    Activar
    Desactivar
  • Alphabetizar
    Activar
    Desactivar
  • Frente Primero
    Activar
    Desactivar
  • Ambos lados
    Activar
    Desactivar
  • Leer
    Activar
    Desactivar
Leyendo...
Frente

Cómo estudiar sus tarjetas

Teclas de Derecha/Izquierda: Navegar entre tarjetas.tecla derechatecla izquierda

Teclas Arriba/Abajo: Colvea la carta entre frente y dorso.tecla abajotecla arriba

Tecla H: Muestra pista (3er lado).tecla h

Tecla N: Lea el texto en voz.tecla n

image

Boton play

image

Boton play

image

Progreso

1/15

Click para voltear

15 Cartas en este set

  • Frente
  • Atrás
¿Qué es la programación funcional?
Son aquellos lenguajes donde las variables no tienen estado, no hay cambios en éstas a lo largo del tiempo y son inmutables, no pueden cambiarse los valores a lo largo de la ejecución.
¿Cuál es su utilidad?
Se especializa en la aplicación de funciones y composición entre ellas, mas que en los cambios de estado y la ejecución secuencial de comando.
El objetivo es conseguir lenguajes expresivos y matemáticamente elegantes, en los que no sea necesario bajar al nivel de la máquina para describir el proceso llevado a cabo por el programa, y evitar el concepto de estado del cómputo.
¿Cuáles son las características principales de la programación funcional?
• Programación declarativa:
• no hay asignación ni cambio de estado
• no hay referencias: identificadores asociados a valores
• no hay efectos laterales
• Recursión
• Funciones como tipos de datos primitivos
Funciones de primera clase y de orden superior
Las funciones de orden superior están estrechamente relacionadas con las funciones de primera clase en las cuales las funciones de orden superior y las funciones de primera clase pueden recibir como argumentos y resultados otras funciones.
Las funciones de orden superior permiten la aplicación parcial, una técnica en la que se aplica una función a sus argumentos uno a la vez, con cada aplicación devolver una nueva función que acepta el siguiente argumento. Esto le permite a uno expresar, por ejemplo, la función sucesor como el operador de suma aplicada parcialmente al número natural uno.
Funciones puras
Las funciones puramente funcionales (o expresiones) no tienen efectos secundarios (memoria o E/S). Esto significa que las funciones puras tienen varias propiedades útiles, muchas de las cuales pueden ser utilizadas para optimizar el código:

Si no se utiliza el resultado de una expresión pura, se puede eliminar sin afectar a otras expresiones.
Si una función pura se llama con parámetros que no causan efectos secundarios, el resultado es constante con respecto a la lista de parámetros (a veces llamada transparencia referencial), es decir, si la función pura se llama de nuevo con los mismos parámetros, el mismo resultado será devuelto (esto puede habilitar las optimizaciones de almacenamiento en caché).
Si no hay una dependencia de datos entre dos expresiones puras, entonces su orden puede ser invertido, o pueden llevarse a cabo en paralelo y que no pueda interferir con los otros.
Si el lenguaje no permite efectos secundarios, entonces cualquier estrategia de evaluación se puede utilizar
Recursividad
Iterar en los lenguajes funcionales es normalmente llevado a cabo mediante recursividad. Las funciones recursivas se invocan a sí mismas, permitiendo que una operación se realice una y otra vez hasta alcanzar el caso base.
Evaluación estricta frente a la no estricta
Los lenguajes funcionales pueden ser clasificados por el hecho de usar evaluación estricta(eager) o no estricta(lazy), conceptos que hacen referencia a cómo los argumentos de las funciones son procesados cuando una expresión está siendo evaluada. La diferencia técnica está en la notación semántica de las expresiones que contienen cálculos fallidos o divergentes.
Sistemas de tipos
El universo de posibles valores que puede tomar una expresión se divide en tipos
Tipos Predefinidos primitivos
Tipos definidos por enumeración
Tipos mediante Producto cartesiano
Combinación de productos y enumeraciones
Tipos parametrizados
Tipos recursivos
Tipos recursivos parametrizados
Programación Funcional y No Funcional
El paradigma de la programación funcional se ha creado explícitamente para permitir un enfoque puramente funcional de la resolución de problemas. La programación funcional es una forma de programación declarativa.

El enfoque imperativo permite al desarrollador escribir código que describe detalladamente los pasos que el equipo debe realizar para cumplir el objetivo. A veces también se denomina programación algorítmica.
Ventajas de la programacion funcional
Testear codigo funcional es mas sencillo ya que no dependemos de un estado que pueda ser alterado desde ningun sitio. Nuestra salida para la misma entrada siempre sera la misma
La programacion concurrente o paralela es mucho mas simple. No dependemos de variables que haya que sincronizar ni tenemos que implementar metodos para validar que solo se pueda entrar en ciertos bloques por un solo hilo lo que nos ayuda a hacer todo mucho mas simple
Las aplicaciones escritas con código funcional suelen tener mucho menos código. A parte de las características de cada una de los lenguajes, al poder pasar funciones como parámetros y devolverlas nuestro codigo es mucho mas reutilizable lo que hace que tengamos menos codigo que mantener
Desventajas de la programacion funcional
Cuando hablamos de programacion funcional hablamos de matematicas llevadas a la programacion. Pero no matematicas de las de sumar y restar si no de las que asustan. Terminos como monada, funtor, monoide, tipos de datos algebraicos… pueden asustar a mas de uno
Una de las principales herramientas de la programacion funcional es la recursion y seamos sinceros, no a todo el mundo le gusta la recursion
Cambiar la forma de trabajar puede costar y si estas habituado a trabajar con clases, objetos y programación orientada a objetos puede ser un camino difícil
Lenguajes de Programación Funcionales
Haskell, Miranda, Scala, Lisp, Clojure, Scheme, Ocaml, SAP y Standard ML, Erlang
Programación funcional en la Actualidad
La programación funcional lleva muchos años entre nosotros, pero siempre se asociaba más a entornos académicos que a empresariales y productivos. Es algo que parece que empieza a cambiar y muchas empresas, algunas muy importantes, están apostando fuerte por este paradigma. ¿Por qué?

Una de las razones puede ser 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. No obstante el hardware actual, nos proporciona unas capacidades de paralelismo nunca vistas, y la nube hace cada vez más sencillo (y barato) construir sistemas distribuidos en distintos servidores. Y claro, para tareas como estas, un lenguaje funcional puede desenvolverse como pez en el agua.
Diagrama de funcionamiento
Ejemplos en JavaScript
function add(a, b) {
return a + b;
}

var add = function(a, b) {
return a + b;
}
var add = (a, b) => a + b;

var calc = {
add: f(a, b) => a + b
};

var add = new Function('a', 'b', 'return a + b');

function applyOperation(a, b, opt) {
return opt(a, b);
}

applyOperation(2, 3, add);