Introducción
La programación funcional es un paradigma de programación en el que intentamos vincular todo en un estilo de funciones matemáticas puras. Es un tipo de estilo de programación declarativo. Su enfoque principal es qué resolver en contraste con un estilo imperativo donde el enfoque principal es cómo resolver. Utiliza expresiones en lugar de declaraciones. Una expresión se evalúa para producir un valor mientras que una declaración se ejecuta para asignar variables. Esas funciones tienen algunas características especiales que se analizan a continuación.
La programación funcional se basa en Lambda Calculus:
El cálculo lambda es un marco desarrollado por Alonzo Church para estudiar cálculos con funciones. Se le puede llamar el lenguaje de programación más pequeño del mundo. Da la definición de lo que es computable. Todo lo que pueda calcularse mediante el cálculo lambda es computable. Es equivalente a la máquina de Turing en su capacidad de computación. Proporciona un marco teórico para describir funciones y su evaluación. Constituye la base de casi todos los lenguajes de programación funcionales actuales.
Hecho: Alan Turing fue un estudiante de Alonzo Church que creó la máquina de Turing que sentó las bases del estilo de programación imperativo.
Lenguajes de programación que soportan programación funcional: Haskell, JavaScript, Python, Scala, Erlang, Lisp, ML, Clojure, OCaml, Common Lisp, Racket.
cambiar la programación java
Conceptos de programación funcional:
- Funciones puras
- recursividad Transparencia referencial Las funciones son de primera clase y pueden ser de orden superior Las variables son inmutables
Funciones puras: Estas funciones tienen dos propiedades principales. Primero, siempre producen el mismo resultado para los mismos argumentos independientemente de cualquier otra cosa.
En segundo lugar, no tienen efectos secundarios, es decir, no modifican ningún argumento ni variable local/global ni flujos de entrada/salida.
La propiedad posterior se llama inmutabilidad. El único resultado de la función pura es el valor que devuelve. Son deterministas.
Los programas realizados mediante programación funcional son fáciles de depurar porque las funciones puras no tienen efectos secundarios ni E/S ocultas. Las funciones puras también facilitan la escritura de aplicaciones paralelas/concurrentes. Cuando el código se escribe en este estilo, un compilador inteligente puede hacer muchas cosas: puede paralelizar las instrucciones, esperar para evaluar los resultados cuando los necesite y memorizar los resultados, ya que los resultados nunca cambian mientras la entrada no cambie.
ejemplo de la función pura:
sum(x, y) // sum is function taking x and y as arguments return x + y // sum is returning sum of x and y without changing them>
Recursión: No hay bucles for o while en los lenguajes funcionales. La iteración en lenguajes funcionales se implementa mediante recursividad. Las funciones recursivas se llaman a sí mismas repetidamente, hasta llegar al caso base.
ejemplo de la función recursiva:
fib(n) if (n <= 1) return 1; else return fib(n - 1) + fib(n - 2);>
Transparencia referencial: En los programas funcionales, las variables una vez definidas no cambian su valor a lo largo del programa. Los programas funcionales no tienen declaraciones de asignación. Si tenemos que almacenar algún valor, en su lugar definimos nuevas variables. Esto elimina cualquier posibilidad de efectos secundarios porque cualquier variable puede reemplazarse con su valor real en cualquier punto de ejecución. El estado de cualquier variable es constante en cualquier instante.
Ejemplo:
x = x + 1 // this changes the value assigned to the variable x. // So the expression is not referentially transparent.>
Las funciones son de primera clase y pueden ser de orden superior: Las funciones de primera clase se tratan como variables de primera clase. Las variables de primera clase se pueden pasar a funciones como parámetros, pueden devolverse desde funciones o almacenarse en estructuras de datos. Las funciones de orden superior son funciones que toman otras funciones como argumentos y también pueden devolver funciones.
cómo convertir una cadena a int en java
Ejemplo:
show_output(f) // function show_output is declared taking argument f // which are another function f(); // calling passed function print_gfg() // declaring another function print('hello gfg'); show_output(print_gfg) // passing function in another function> Las variables son inmutables: En programación funcional, no podemos modificar una variable después de que se haya inicializado. Podemos crear nuevas variables, pero no podemos modificar las existentes, y esto realmente ayuda a mantener el estado durante todo el tiempo de ejecución de un programa. Una vez que creamos una variable y establecemos su valor, podemos tener plena confianza sabiendo que el valor de esa variable nunca cambiará.
Ventajas y desventajas de la programación funcional.
Ventajas:
- Las funciones puras son más fáciles de entender porque no cambian ningún estado y dependen únicamente de la información que se les proporciona. Cualquier producto que produzcan es el valor de retorno que dan. La firma de su función brinda toda la información sobre ellos, es decir, su tipo de retorno y sus argumentos.
- La capacidad de los lenguajes de programación funcionales para tratar funciones como valores y pasarlas a funciones como parámetros hace que el código sea más legible y comprensible.
- Probar y depurar es más fácil. Dado que las funciones puras solo toman argumentos y producen resultados, no producen ningún cambio, no toman entradas ni producen resultados ocultos. Utilizan valores inmutables, por lo que resulta más fácil comprobar algunos problemas en programas escritos que utilizan funciones puras.
- Se utiliza para implementar concurrencia/paralelismo porque las funciones puras no cambian las variables ni ningún otro dato fuera de ellas.
- Adopta una evaluación diferida que evita la evaluación repetida porque el valor se evalúa y almacena solo cuando es necesario.
Desventajas:
ejemplos de dfa
- A veces, escribir funciones puras puede reducir la legibilidad del código.
- Escribir programas en estilo recursivo en lugar de utilizar bucles puede resultar un poco intimidante.
- Escribir funciones puras es fácil, pero combinarlas con el resto de la aplicación y las operaciones de E/S es una tarea difícil.
- Los valores inmutables y la recursividad pueden provocar una disminución del rendimiento.
Aplicaciones:
- Se utiliza en cálculos matemáticos.
- Es necesario cuando se requiere concurrencia o paralelismo.
Dato: Whatsapp necesita sólo 50 ingenieros para sus 900 millones usuarios Porque Erlang se utiliza para implementar sus necesidades de concurrencia. Facebook utiliza Haskell en su sistema antispam.