• 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/17

Click para voltear

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}