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 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.
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

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

  • 1.
  • 2.
    About me ● Nãosou 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 usarfuncional? ● High Level ○ programas mais concisos ○ próximos duma especificação matemática ● Concorrência ● Tail-Recursion
  • 9.
    Por que nãousar 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 vsDeclarativa 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.
  • 11.
    Swift é umalinguagem Funcional?
  • 12.
  • 13.
    Swift é umalinguagem imperativa que dá suporte a conceitos funcionais
  • 14.
  • 15.
    Modular ● Coleção defunçõ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 ● Simplesrefatorar 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 ● Permiteque 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
  • 18.
    Opacidade ● Oposto transparência ●Quando função retorna valores diferentes para a mesma entrada.
  • 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 asfunçõ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
  • 22.
  • 24.
    Recursão caudal ● Quandoa 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
  • 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
  • 27.
  • 28.
  • 29.
    Links ● http://www.functionalprogramming.com/ ● http://learnyouahaskell.com/introduction ●http://learnyousomeerlang.com/content ● http://elixir-lang.org
  • 30.