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

Preview:

Citation preview

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

Obrigado

Recommended