programação funcional com swift cocoa heads 24-03
TRANSCRIPT
![Page 1: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/1.jpg)
Programação Funcional com Swift
Schwarzenegger Alves
![Page 2: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/2.jpg)
About me
● Não sou um programador funcional● Trabalho com backend-web rails● Swift somente nas minhas horas vagas
![Page 3: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/3.jpg)
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.
![Page 4: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/4.jpg)
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
![Page 5: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/5.jpg)
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
![Page 6: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/6.jpg)
O que é programação funcional
● Linguagens funcionais suportam melhor o paradigma funcional
● Scheme, ML, O’Caml, Haskell, F#, Scala, Erlang, Elixir.
![Page 7: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/7.jpg)
Por que usar funcional?
● High Level○ programas mais concisos○ próximos duma especificação matemática
● Concorrência● Tail-Recursion
![Page 8: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/8.jpg)
![Page 9: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/9.jpg)
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.
![Page 10: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/10.jpg)
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.
![Page 11: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/11.jpg)
Swift é uma linguagem Funcional?
![Page 12: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/12.jpg)
Não
![Page 13: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/13.jpg)
Swift é uma linguagem imperativa que dá suporte a conceitos funcionais
![Page 14: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/14.jpg)
Conceitos Funcionais
![Page 15: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/15.jpg)
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.
![Page 16: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/16.jpg)
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.
![Page 17: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/17.jpg)
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
![Page 18: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/18.jpg)
Opacidade
● Oposto transparência● Quando função retorna valores diferentes
para a mesma entrada.
![Page 19: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/19.jpg)
![Page 20: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/20.jpg)
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
![Page 21: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/21.jpg)
● 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
![Page 22: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/22.jpg)
Recursão
![Page 23: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/23.jpg)
![Page 24: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/24.jpg)
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
![Page 25: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/25.jpg)
![Page 26: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/26.jpg)
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
![Page 27: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/27.jpg)
http://fuckingclosuresyntax.com/
![Page 28: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/28.jpg)
Material
![Page 29: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/29.jpg)
Links
● http://www.functionalprogramming.com/● http://learnyouahaskell.com/introduction● http://learnyousomeerlang.com/content● http://elixir-lang.org
![Page 30: Programação funcional com swift cocoa heads 24-03](https://reader034.vdocuments.pub/reader034/viewer/2022042522/55a89c341a28ab8f188b4602/html5/thumbnails/30.jpg)
Obrigado