- Barajar
ActivarDesactivar
- Alphabetizar
ActivarDesactivar
- Frente Primero
ActivarDesactivar
- Ambos lados
ActivarDesactivar
- Leer
ActivarDesactivar
Leyendo...
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
Boton play
Boton play
17 Cartas en este set
- Frente
- Atrás
Qué es la programación funcional?
|
Es un “paradigma de programación”. Esto quiere decir que es una forma de pensar en cómo se organiza un programa basado en una serie de principios.
|
¿Cuál es su utilidad?
|
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?
|
• Modularidad
• Transparencia referencial • Fundamentado en el cálculo lambda • Funciones de orden superior • Recursión • Gestión de memoria implícita • Tipificado • Polimorfismo paramétrico • Evaluación perezosa |
Primera clase
|
Describe las entidades del lenguaje de programación que no tienen ninguna restricción de su utilización (por lo tanto funciones de primera clase pueden aparecer en cualquier parte del programa que otras entidades de primer nivel como los números pueden, incluidos como argumentos a otras funciones y como sus valores de retorno).
|
Orden superior
|
Son aquellas que reciben funciones como argumentos y/o retornan funciones como resultado
|
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
|
Recursivas
|
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
|
La evaluación estricta evalúa por completo los argumentos a menos que sus valores requieran evaluar la propia función que se llama a sí misma.
|
Evaluación no estricta
|
Es un mecanismo para mejorar la modularidad de los programas a través de la separación de tareas, a partir de la implementación de productores y consumidores de flujos de datos de forma fácil e independiente.
|
Tipos de sistema
|
• Tipos primitivos predefinidos
• Tipos definidos por enumeración • Tipos mediante producto cartesiano • Combinación de productos y enumeración • Tipos parametrizados • Tipos recursivos • Tipos recursivos parametrizados |
Programación funcional y no funcional
|
Es posible utilizar un estilo de programación funcional en lenguajes que tradicionalmente no se consideran lenguajes funcionales.
|
Ventajas
|
• tiende a ser más conciso y expresivo
• Más predecible. • Se presta a la paralelización y la computación distribuida • Se presta a los paradigmas asincrónicos y dirigidos por eventos • JavaScript como lenguaje tiene una naturaleza más funcional que imperativa. |
Desventajas
|
• Puede ser un poco desconcertante.
• Puede requerir más recursos al estar menos orientado a la máquina y más al humano. • Es menos común, y por ende hay menos información |
¿Cuáles son los lenguajes funcionales?
|
Scala, Haskel, Lisp, Java, C, C++
|
Su uso y aplicación en la actualidad
|
Un ejemplo de lenguaje de programación funcional usado en el ámbito industrial es Erlang, el cual fue desarrollado para poner en práctica sistemas de tolerancia a fallos en las telecomunicaciones. Importantes empresas como WhatsApp, Facebook, o T-Mobile optaron por Erlang como lenguaje en alguno de sus desarrollos.
|
Diagrama representativo de la programación funcional
|
|
Ejemplo
|
package com.arquitecturajava.streams;
import java.util.ArrayList; public class PrincipalFuncional { public static void main(String[] args) { ArrayList<Gasto> lista= new ArrayList<Gasto>(); lista.add(new Gasto("A",80)); lista.add(new Gasto("B",50)); lista.add(new Gasto("C",70)); lista.add(new Gasto("D",95)); double resultado=lista.stream() .mapToDouble(gasto->gasto.getImporte()*1.21) .filter(gasto->gasto<100) .sum(); System.out.println(resultado); } } procedure MCD(u,v:integer):integer; begin if (v=0) then return u else return MCD(v,u mod v); end; {MCD} |