4. O que é umaLinguagemFuncional? Programação com alto nível de abstração; Soluções elegantes, concisas e poderosas; Funções: computam um resultado que depende apenas dos valores das entradas; Forte fundamentação teórica, o que permite mais facilmente provas de propriedades sobre os programas.
5. Características Sua sintaxe encoraja uma visão totalmente modular do fluxo do programa; Reutilização do código previamente escrito (funções) para construir programas cada vez mais complexos; Geralmente não há um identificador (por exemplo a função main( ) de C e Java) para indicar o ponto onde a execução do programa inicia.
8. Operações que dependem de Memória Variáveis Atualizáveis Globais e Locais Atribuições x = x + 1 Alocação dinâmica a = new Pessoa(); Comandos de Repetição for (x=0;x<10;x++) …
9. Por que não Utilizar Memória? Programas que utilizam memória são mais difíceis de serem analisados. Exemplo: Otimização de Código: …. int f(int n) { … } int g() { a = f(1) + f(1); } … int f(int n) { … } int g() { a = 2*f(1); } otimiza para
10. Por que não Utilizar Memória? Programas que utilizam memória são mais difíceis de serem analisados. Exemplo: Otimização de Código: int x = 0; int f(int n) { return (x += n); } int g() { a = f(1) + f(1); } int x = 0; int f(int n) { return (x += n); } int g() { a = 2*f(1); } X otimiza para
11. Mais Exemplos O que vai ser impresso pela função f? class C { int n; } int f(C a, C b) { a.n = 2; b.n = 3; System.out.println(a.n+b.n); } ….
12. Mais Exemplos O que vai ser impresso pela função f? class C { int n; } int f(C a, C b) { a.n = 2; b.n = 3; System.out.println(a.n+b.n); } void main() { C a = new C(); f(a,a); }
13. Mais Exemplos O que vai ser impresso pela função f? class C { int n; void setN(int x) { n = x; } } int f(C a) { a.setN(5); System.out.println(a.n); } ….
14. Mais Exemplos O que vai ser impresso pela função f? class C { int n; void setN(int x) { n = x; } } int f(C a) { a.setN(5); System.out.println(a.n); } class D extends C { void setN(int x) { n = 2*x; } } void main() { C a = new D(); f(a); }
15. Como podemosver… Análise de programasqueabusam de variáveis e orientação a objetosdificultam a análise de segmentos de umasistema. O sistema tem que ser estudadocomo um todo.
16. Como ProgramarFuncionalmente? Um programadorfuncionalutiliza: Comandos de seleção; Recursão / Indução; Estruturas de dados complexas; Novosconceitos de programação Propostosparacompensara “deficiência” da LF; Polimorfismo, Funções de altaordem, Avaliaçãotardia, Monads, entre outros.
18. Linguagens Funcionais Puras LinguagemFuncional “pura”: Nãopossuimemóriacomo base dalinguagem; Exemplo: Haskell; LinguagensFuncionaisnãopuras: Possuemconceitos de memória; Exemplos: SML, Lisp, OCAML.
19. Vantagens Manipulação mais simples de programas Legibilidade; Modularidade; Prova de propriedades: addDa b = 2 * (a + b) = 2 * (b + a) = addD b a ...
20. Desvantagens “O mundo não é funcional!”; Implementações ineficientes; Mecanismos primitivos de E/S e formatação Interface.