2. About me
● Não sou um programador funcional
● Trabalho com backend-web rails
● Swift somente nas minhas horas vagas
3. O que é programação funcional
É um paradigma que trata a computação como
uma avaliação de funções matemáticas e que
evita estados ou dados mutáveis
Combina a flexibilidade e o poder e a clareza
da abstração.
4. O que é programação funcional
● No paradigma imperativo, um programa é
uma sequência de instruções que mudam
células na memória
● No paradigma funcional, um programa é um
conjunto de definições de funções que
aplicamos a valores
5. O que é programação funcional
● Programas consistem em definições de
dados e funções
● Execução de um programa = Avaliação de
expressões
● Funções não têm efeitos colaterais e são
valores de primeira ordem
6. O que é programação funcional
● Linguagens funcionais suportam melhor o
paradigma funcional
● Scheme, ML, O’Caml, Haskell, F#, Scala,
Erlang, Elixir.
7. Por que usar funcional?
● High Level
○ programas mais concisos
○ próximos duma especificação matemática
● Concorrência
● Tail-Recursion
8.
9. Por que não usar funcional?
● Compiladores/interpretadores mais
complexos.
● Difícil prever os custos de execução
(tempo/espaço).
● alguns algoritmos são mais eficientes
quando implementados de forma imperativa.
10. L. Imperativa vs Declarativa
Características Imperativa(Procedural/OOP) Declarativa(Funcional)
Foco do Programa Como completar tarefas
(Algoritmo) e como gerenciar
mudanças de estados
Que informação é desejada e
que transformações serão
necessárias
Mudanças de Estado Importante Não existe
Ordem de Execução Importante Baixa importancia
Controle de fluxo Loops, Condicionais e
chamada de funções
Chamadas de funções
(recursão)
Principal objeto de
manipulação
Instancias de estruturas ou
classes
Funções como objetos e
coleção de dados.
15. Modular
● Coleção de funções criam o programa.
● Quebra o código em pedaços pequenos
● Remove enfase das sequências e evita
estados mutáveis.
● Modularidade aumenta legibilidade.
16. Fácil manutenção
● Simples refatorar quando funções acoplam
todas as variáveis.
● Ordem de execução não importa. Uma
função sempre retorna o que é esperado.
● Testes isolados.
17. Transparência Referencial
● Permite que qualquer função ou expressão
seja substituída por qualquer outra que
tenha o mesmo valor.
● Transparência referencial é valida devido a
proibição de efeitos colaterais que são as
mudanças de estado causadas pela
avaliação de uma função
20. Manipulação de dados
● Foco na manipulação de dados(O que você
precisa) e não pre-condições e passos
(Como Chegar)
● Tipagem e estados não mutaveis permitem
ao compilador optimizar o programa
21. ● Todas as funções vão receber argumentos.
● Todas as funções vão retornar outra função
ou um conjunto de dados.
● Sem objetos mutáveis.
● Não vamos manter ou checar estado.
● Sem variáveis globais.
● Sem loops, temos recursão para isso.
Mindset Funcional
24. Recursão caudal
● Quando a recursão passa seu resultado
para o próximo método do loop.
● Código precisa ser otimizado para ser
eficiente
● Swift ainda não garante essa optimização
25.
26. Closures
● Funções globais, aninhadas ou anonimas
que serão usadas no código
● Simplificando: É uma função que pode ser
guardada como variável
● First Class Function