SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
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

Mais conteúdo relacionado

Destaque

Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Helder da Rocha
 
Paradigmas
ParadigmasParadigmas
Paradigmasmavega
 
Introdução ao Swift por Henrique Morbin – iOS Developer
Introdução ao Swift por Henrique Morbin – iOS DeveloperIntrodução ao Swift por Henrique Morbin – iOS Developer
Introdução ao Swift por Henrique Morbin – iOS DeveloperHenrique Morbin
 
Componentes passivos e eletromecânicos
Componentes passivos e eletromecânicosComponentes passivos e eletromecânicos
Componentes passivos e eletromecânicosNatanael Simões
 
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com SwiftSemcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com SwiftJuliana Chahoud
 
Primeiros passos no iOS com Objective-C
Primeiros passos no iOS com Objective-CPrimeiros passos no iOS com Objective-C
Primeiros passos no iOS com Objective-Cosnipso
 
Desenvolvendo para iOS em linux
Desenvolvendo para iOS em linuxDesenvolvendo para iOS em linux
Desenvolvendo para iOS em linuxErisvaldo Junior
 
Desenvolvimento de Apps e Games para iOS - Parte 2
Desenvolvimento de Apps e Games para iOS - Parte 2Desenvolvimento de Apps e Games para iOS - Parte 2
Desenvolvimento de Apps e Games para iOS - Parte 2Erisvaldo Junior
 
Paradigmas de Programação
Paradigmas de ProgramaçãoParadigmas de Programação
Paradigmas de ProgramaçãoNatanael Simões
 
Plataforma iOS
Plataforma iOSPlataforma iOS
Plataforma iOSernandesjr
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Valmon Gaudencio
 
IOS sistema operacional
IOS sistema operacionalIOS sistema operacional
IOS sistema operacionalHamburg Süd
 

Destaque (16)

Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014
 
Paradigmas
ParadigmasParadigmas
Paradigmas
 
Mercado iOS & Swift vs Objective-C
Mercado iOS & Swift vs Objective-CMercado iOS & Swift vs Objective-C
Mercado iOS & Swift vs Objective-C
 
Introdução ao Swift por Henrique Morbin – iOS Developer
Introdução ao Swift por Henrique Morbin – iOS DeveloperIntrodução ao Swift por Henrique Morbin – iOS Developer
Introdução ao Swift por Henrique Morbin – iOS Developer
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Componentes passivos e eletromecânicos
Componentes passivos e eletromecânicosComponentes passivos e eletromecânicos
Componentes passivos e eletromecânicos
 
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com SwiftSemcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
 
Primeiros passos no iOS com Objective-C
Primeiros passos no iOS com Objective-CPrimeiros passos no iOS com Objective-C
Primeiros passos no iOS com Objective-C
 
Desenvolvendo para iOS em linux
Desenvolvendo para iOS em linuxDesenvolvendo para iOS em linux
Desenvolvendo para iOS em linux
 
Desenvolvimento de Apps e Games para iOS - Parte 2
Desenvolvimento de Apps e Games para iOS - Parte 2Desenvolvimento de Apps e Games para iOS - Parte 2
Desenvolvimento de Apps e Games para iOS - Parte 2
 
Paradigmas de Programação
Paradigmas de ProgramaçãoParadigmas de Programação
Paradigmas de Programação
 
Plataforma iOS
Plataforma iOSPlataforma iOS
Plataforma iOS
 
Desenvolvimento IOS - Mobile
Desenvolvimento IOS - MobileDesenvolvimento IOS - Mobile
Desenvolvimento IOS - Mobile
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 
IOS sistema operacional
IOS sistema operacionalIOS sistema operacional
IOS sistema operacional
 

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

Programação funcional
Programação funcionalProgramação funcional
Programação funcionalDayvson Lima
 
Apresentação final
Apresentação finalApresentação final
Apresentação finalvalmon
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativoTony Alexander Hild
 
Introdução a Linguagem de Programação
Introdução a Linguagem de ProgramaçãoIntrodução a Linguagem de Programação
Introdução a Linguagem de ProgramaçãoJessica Ribeiro
 
Conceitos base de programação - parte 1
Conceitos base de programação - parte 1Conceitos base de programação - parte 1
Conceitos base de programação - parte 1João Piedade
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação12anogolega
 
Orientação a Aspectos em PHP
Orientação a Aspectos em PHPOrientação a Aspectos em PHP
Orientação a Aspectos em PHPFlávio Lisboa
 
Desenvolvimento do Módulo de Planejamento do Ambiente Experimental SystEM-Env...
Desenvolvimento do Módulo de Planejamento do Ambiente Experimental SystEM-Env...Desenvolvimento do Módulo de Planejamento do Ambiente Experimental SystEM-Env...
Desenvolvimento do Módulo de Planejamento do Ambiente Experimental SystEM-Env...Edson Oliveira Junior
 
Algoritmo estruturado
Algoritmo estruturadoAlgoritmo estruturado
Algoritmo estruturadodasko
 
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Os Fantasmas !
 
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTIOracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTIFernando Ike
 

Semelhante a Programação funcional com swift cocoa heads 24-03 (20)

Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Principios e paradigmas_de_computacao2
Principios e paradigmas_de_computacao2Principios e paradigmas_de_computacao2
Principios e paradigmas_de_computacao2
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 
Logica Programação. ...
Logica Programação. ...Logica Programação. ...
Logica Programação. ...
 
Apresentação final
Apresentação finalApresentação final
Apresentação final
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativo
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
01 aula1 habib
01 aula1 habib01 aula1 habib
01 aula1 habib
 
Introdução a Linguagem de Programação
Introdução a Linguagem de ProgramaçãoIntrodução a Linguagem de Programação
Introdução a Linguagem de Programação
 
Aula05-JavaScript
Aula05-JavaScriptAula05-JavaScript
Aula05-JavaScript
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
 
Conceitos base de programação - parte 1
Conceitos base de programação - parte 1Conceitos base de programação - parte 1
Conceitos base de programação - parte 1
 
Aula14 - Funções em PHP
Aula14 - Funções em PHPAula14 - Funções em PHP
Aula14 - Funções em PHP
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação
 
Orientação a Aspectos em PHP
Orientação a Aspectos em PHPOrientação a Aspectos em PHP
Orientação a Aspectos em PHP
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Desenvolvimento do Módulo de Planejamento do Ambiente Experimental SystEM-Env...
Desenvolvimento do Módulo de Planejamento do Ambiente Experimental SystEM-Env...Desenvolvimento do Módulo de Planejamento do Ambiente Experimental SystEM-Env...
Desenvolvimento do Módulo de Planejamento do Ambiente Experimental SystEM-Env...
 
Algoritmo estruturado
Algoritmo estruturadoAlgoritmo estruturado
Algoritmo estruturado
 
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTIOracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
 

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

  • 2. About me ● Não sou 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 usar funcional? ● High Level ○ programas mais concisos ○ próximos duma especificação matemática ● Concorrência ● Tail-Recursion
  • 8.
  • 9. 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.
  • 10. 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.
  • 11. Swift é uma linguagem Funcional?
  • 12. Não
  • 13. Swift é uma linguagem imperativa que dá suporte a conceitos funcionais
  • 15. 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.
  • 16. 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.
  • 17. 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
  • 18. Opacidade ● Oposto transparência ● Quando função retorna valores diferentes para a mesma entrada.
  • 19.
  • 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 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
  • 23.
  • 24. 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
  • 25.
  • 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
  • 29. Links ● http://www.functionalprogramming.com/ ● http://learnyouahaskell.com/introduction ● http://learnyousomeerlang.com/content ● http://elixir-lang.org