programação funcional com swift cocoa heads 24-03
TRANSCRIPT
Programação Funcional com Swift
Schwarzenegger Alves
About me
● Não sou um programador funcional● Trabalho com backend-web rails● Swift somente nas minhas horas vagas
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.
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
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
O que é programação funcional
● Linguagens funcionais suportam melhor o paradigma funcional
● Scheme, ML, O’Caml, Haskell, F#, Scala, Erlang, Elixir.
Por que usar funcional?
● High Level○ programas mais concisos○ próximos duma especificação matemática
● Concorrência● Tail-Recursion
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.
L. Imperativa vs DeclarativaCaracterí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.
Swift é uma linguagem Funcional?
Não
Swift é uma linguagem imperativa que dá suporte a conceitos funcionais
Conceitos Funcionais
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.
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.
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
Opacidade
● Oposto transparência● Quando função retorna valores diferentes
para a mesma entrada.
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
● 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
Recursão
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
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
http://fuckingclosuresyntax.com/
Material
Links
● http://www.functionalprogramming.com/● http://learnyouahaskell.com/introduction● http://learnyousomeerlang.com/content● http://elixir-lang.org
Obrigado