30
Programação Funcional com Swift Schwarzenegger Alves

Programação funcional com swift cocoa heads 24-03

Embed Size (px)

Citation preview

Page 1: Programação funcional com swift  cocoa heads 24-03

Programação Funcional com Swift

Schwarzenegger Alves

Page 2: Programação funcional com swift  cocoa heads 24-03

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

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

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

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

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

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
Page 9: Programação funcional com swift  cocoa heads 24-03

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

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

Swift é uma linguagem Funcional?

Page 12: Programação funcional com swift  cocoa heads 24-03

Não

Page 13: Programação funcional com swift  cocoa heads 24-03

Swift é uma linguagem imperativa que dá suporte a conceitos funcionais

Page 14: Programação funcional com swift  cocoa heads 24-03

Conceitos Funcionais

Page 15: Programação funcional com swift  cocoa heads 24-03

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

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

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

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
Page 20: Programação funcional com swift  cocoa heads 24-03

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

● 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

Recursão

Page 23: Programação funcional com swift  cocoa heads 24-03
Page 24: Programação funcional com swift  cocoa heads 24-03

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
Page 26: Programação funcional com swift  cocoa heads 24-03

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

http://fuckingclosuresyntax.com/

Page 28: Programação funcional com swift  cocoa heads 24-03

Material

Page 30: Programação funcional com swift  cocoa heads 24-03

Obrigado