SlideShare una empresa de Scribd logo
1 de 38
Em F# e Scala

Técnicas de Programação
               Funcional
        Vinícius Hana e Juliano Alves

          @vinicius_hana e @vonjuliano
Apresentação
Primeiro de tudo: não são paradigmas
             excludentes!
Programação funcional considera que
   todas as operações são funções
Todas as operações são funções
    def f(x: Int, g: (Int) => Int) = g(x) + 3
    def g(x: Int) = x * 2

    val resultado = f(4, g) // isso dá 11




5
Isso tem nome: funções de alta ordem
Perceberam que se parece com
        matemática?
Todas as operações são funções
    f(x) = x + 3

    g(x) = x * 2

    (f o g) = f(g(x)) = g(x) + 3

    g(4) = 4 * 2 = 8  f(g(4)) = 8 +3 = 11




8
Funções de alta ordem permitem
   algumas coisas bem legais!
Funções de alta ordem
    let funcao =
         let lista = [0;1;2;3;4]
         List.map (fun x -> x * 2) lista




1
0
Agora, uma outra ideia:
Dado f(x) = x + 1, se eu passar sempre
         1, sempre vai dar 2?
Sim!
E isso tem nome: transparência
          referencial
Dada a mesma entrada, obteremos
       sempre a mesma saída
Ou seja, ausência de efeitos colaterais
Dá pra fazer isso em programação?
    Sim, usando imutabilidade!
Mutabilidade
    public int Resultado { get; set; }

    public void Dobrar(int numero)
    {
         Resultado *= 2;
    }




1
5
Imutabilidade
    DateTime.Now.AddDays(1);
    // retorna novo datetime com a adição feita




1
6
Dada a mesma entrada, obteremos
     sempre a mesma saída
Ou seja, ausência de efeitos colaterais
   – mais confiabilidade no código
F# e Scala suportam mutabilidade e
            imutabilidade
Imutabilidade em Scala e F#
    let x = 1 // imutavel
    let mutable x = 1 // mutavel

    val x = 1 // imutavel
    var y = 1 // mutavel




2
0
Isso ajuda demais em concorrência
Certo, mas como eu manipulo e altero
os itens de uma lista, então? Ela não é
              imutável?
Simples: gere outra com nossa velha
          amiga recursão!
Com recursão, podemos compor e
        decompor listas
Recursão em listas
let rec reverse lista =
      match lista with
      | head :: tail -> (reverse tail) @ [head]
      | [] -> []



def reverse[T](list: List[T]): List[T] = list match {
  case head :: tail => reverse(tail) ++ List(head)
  case Nil => Nil
}
Percebeu uma estrutura diferente
      para compor a lista?
Essa estrutura se chama pattern
           matching
Ela lembra switch-case, porém com
     muito mais funcionalidade
Pattern matching
    match coisa with
    | 1 | 3 -> …
    | head :: tail -> …
    | [] -> …
    | _ -> …

    lista match {
         case 1 => …
         case head :: tail => …
         case Nil => …
         case _ => …

2
9
E se eu iterar em uma lista
gigantesca, ou mesmo infinita?
Lista infinita? Isso não arrebentaria
              a memória?
Não se você tiver lazy evaluation!
Lazy evaluation
    let x = 10
    let resultado = lazy (x + 10)




    val x = { println("x"); 1 }
    lazy val y = { println("y"); 2 }




3
3
Vamos juntar tudo isso em uma
 implementação de Fibonacci?
Fibonacci
    let rec fib n =
         match n with
         | x when n > 2 -> 1
         | _ -> fib (n - 1) + fib (n - 2)


    val seq: Stream[BigInt] = 0 #:: 1 #:: (seq zip
    seq.tail).map { case (a, b) => a + b }

    def elemento(posicao: Int): BigInt = seq(posicao
    - 1)

3
5
Referências
Obrigado!
Vinícius Hana e Juliano Alves

  @vinicius_hana e @vonjuliano
www.lambda3.com.br

Más contenido relacionado

La actualidad más candente (20)

Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Aula Prolog 09 - Listas
Aula Prolog 09 - ListasAula Prolog 09 - Listas
Aula Prolog 09 - Listas
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Estruturas de dados em Python
Estruturas de dados em PythonEstruturas de dados em Python
Estruturas de dados em Python
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2
 
Minicurso Prolog
Minicurso PrologMinicurso Prolog
Minicurso Prolog
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
 
Apostila rpira
Apostila rpiraApostila rpira
Apostila rpira
 
Aula 20
Aula 20Aula 20
Aula 20
 
Pilha
PilhaPilha
Pilha
 
Sentido
SentidoSentido
Sentido
 
Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)
 
Listas em C
Listas em CListas em C
Listas em C
 
Aula 21
Aula 21Aula 21
Aula 21
 
Calculo 2 aula 1 integral indefinida
Calculo 2 aula 1  integral indefinidaCalculo 2 aula 1  integral indefinida
Calculo 2 aula 1 integral indefinida
 

Destacado

WA Government Procurement
WA Government ProcurementWA Government Procurement
WA Government ProcurementRobin Burton
 
Small Shifts, Big Impact BLC13
Small Shifts, Big Impact BLC13Small Shifts, Big Impact BLC13
Small Shifts, Big Impact BLC13Shelley Paul
 
NOBUX Corporate Presentation Q1 2016 ENG
NOBUX Corporate Presentation Q1 2016 ENGNOBUX Corporate Presentation Q1 2016 ENG
NOBUX Corporate Presentation Q1 2016 ENGAntonio Perez
 
Plugging in: GaETC 2010
Plugging in: GaETC 2010Plugging in: GaETC 2010
Plugging in: GaETC 2010Shelley Paul
 
Bonisteel Birthday Bash
Bonisteel Birthday BashBonisteel Birthday Bash
Bonisteel Birthday BashBeth Gourley
 
Evolving role of the CEO Dataquest 22June2010
Evolving role of the CEO Dataquest 22June2010Evolving role of the CEO Dataquest 22June2010
Evolving role of the CEO Dataquest 22June2010Sudhir Aggarwal
 
Online marketing companies in india
Online marketing companies in indiaOnline marketing companies in india
Online marketing companies in indiaimarksseo
 
Novidades ALM Summit 2013
Novidades ALM Summit 2013Novidades ALM Summit 2013
Novidades ALM Summit 2013Lambda 3
 
Small Shifts, Big Impact BLC12
Small Shifts, Big Impact BLC12Small Shifts, Big Impact BLC12
Small Shifts, Big Impact BLC12Shelley Paul
 
ELS PRIMERS DIES A L'ESCOLA
ELS PRIMERS DIES A L'ESCOLAELS PRIMERS DIES A L'ESCOLA
ELS PRIMERS DIES A L'ESCOLAlkalafell
 
Keynote Lambda Day
Keynote Lambda DayKeynote Lambda Day
Keynote Lambda DayLambda 3
 
YourMarch Pitch deck
YourMarch Pitch deckYourMarch Pitch deck
YourMarch Pitch deckAman Gupta
 
Voc les professions et autres+corrige
Voc les professions et autres+corrigeVoc les professions et autres+corrige
Voc les professions et autres+corrigehelenaaldaz
 

Destacado (19)

WA Government Procurement
WA Government ProcurementWA Government Procurement
WA Government Procurement
 
Small Shifts, Big Impact BLC13
Small Shifts, Big Impact BLC13Small Shifts, Big Impact BLC13
Small Shifts, Big Impact BLC13
 
Paso 7
Paso 7Paso 7
Paso 7
 
Process_Flow - PDF
Process_Flow - PDFProcess_Flow - PDF
Process_Flow - PDF
 
Internet
InternetInternet
Internet
 
NOBUX Corporate Presentation Q1 2016 ENG
NOBUX Corporate Presentation Q1 2016 ENGNOBUX Corporate Presentation Q1 2016 ENG
NOBUX Corporate Presentation Q1 2016 ENG
 
Plugging in: GaETC 2010
Plugging in: GaETC 2010Plugging in: GaETC 2010
Plugging in: GaETC 2010
 
Bonisteel Birthday Bash
Bonisteel Birthday BashBonisteel Birthday Bash
Bonisteel Birthday Bash
 
Evolving role of the CEO Dataquest 22June2010
Evolving role of the CEO Dataquest 22June2010Evolving role of the CEO Dataquest 22June2010
Evolving role of the CEO Dataquest 22June2010
 
Online marketing companies in india
Online marketing companies in indiaOnline marketing companies in india
Online marketing companies in india
 
Novidades ALM Summit 2013
Novidades ALM Summit 2013Novidades ALM Summit 2013
Novidades ALM Summit 2013
 
Small Shifts, Big Impact BLC12
Small Shifts, Big Impact BLC12Small Shifts, Big Impact BLC12
Small Shifts, Big Impact BLC12
 
ELS PRIMERS DIES A L'ESCOLA
ELS PRIMERS DIES A L'ESCOLAELS PRIMERS DIES A L'ESCOLA
ELS PRIMERS DIES A L'ESCOLA
 
Keynote Lambda Day
Keynote Lambda DayKeynote Lambda Day
Keynote Lambda Day
 
SaaS for e-Governance
SaaS for e-GovernanceSaaS for e-Governance
SaaS for e-Governance
 
lesson plan
lesson planlesson plan
lesson plan
 
YourMarch Pitch deck
YourMarch Pitch deckYourMarch Pitch deck
YourMarch Pitch deck
 
Doritos
DoritosDoritos
Doritos
 
Voc les professions et autres+corrige
Voc les professions et autres+corrigeVoc les professions et autres+corrige
Voc les professions et autres+corrige
 

Similar a Funcional em F# e Scala: Programação Funcional

Python e django na prática
Python e django na práticaPython e django na prática
Python e django na práticaRafael Cassau
 
Programando em python recursao
Programando em python   recursaoProgramando em python   recursao
Programando em python recursaosamuelthiago
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoArthur Xavier
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?Denis Costa
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Marco Mendes
 
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)Filipe Chagas Ferraz
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellSérgio Souza Costa
 
Tutorial aed iii 007 - algoritmo de ordenação heapsort
Tutorial aed iii   007 - algoritmo de ordenação heapsortTutorial aed iii   007 - algoritmo de ordenação heapsort
Tutorial aed iii 007 - algoritmo de ordenação heapsortFlávio Freitas
 
Programando em python funcoes
Programando em python   funcoesProgramando em python   funcoes
Programando em python funcoessamuelthiago
 
Apostila 3 calculo i integrais
Apostila 3 calculo i integraisApostila 3 calculo i integrais
Apostila 3 calculo i integraistrigono_metrico
 
Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?pmatiello
 

Similar a Funcional em F# e Scala: Programação Funcional (20)

Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
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
 
Programando em python recursao
Programando em python   recursaoProgramando em python   recursao
Programando em python recursao
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introdução
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?
 
Slide_Python.pdf
Slide_Python.pdfSlide_Python.pdf
Slide_Python.pdf
 
Haskell
HaskellHaskell
Haskell
 
Programando em Python - Funções
Programando em Python -  FunçõesProgramando em Python -  Funções
Programando em Python - Funções
 
Matemática
MatemáticaMatemática
Matemática
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo Haskell
 
Usando o winplot
Usando o winplotUsando o winplot
Usando o winplot
 
Python 02
Python 02Python 02
Python 02
 
Tutorial aed iii 007 - algoritmo de ordenação heapsort
Tutorial aed iii   007 - algoritmo de ordenação heapsortTutorial aed iii   007 - algoritmo de ordenação heapsort
Tutorial aed iii 007 - algoritmo de ordenação heapsort
 
Programando em python funcoes
Programando em python   funcoesProgramando em python   funcoes
Programando em python funcoes
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Apostila 3 calculo i integrais
Apostila 3 calculo i integraisApostila 3 calculo i integrais
Apostila 3 calculo i integrais
 
Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?
 
Python
PythonPython
Python
 

Más de Lambda 3

Marketing de Produtos Digitais
Marketing de Produtos DigitaisMarketing de Produtos Digitais
Marketing de Produtos DigitaisLambda 3
 
Experiências, Erros e Acertos no Desenvolvimento de Projetos Ágeis
Experiências, Erros e Acertos no Desenvolvimento de Projetos ÁgeisExperiências, Erros e Acertos no Desenvolvimento de Projetos Ágeis
Experiências, Erros e Acertos no Desenvolvimento de Projetos ÁgeisLambda 3
 
Source Control
Source ControlSource Control
Source ControlLambda 3
 
Jquery - Dicas e Truques
Jquery - Dicas e TruquesJquery - Dicas e Truques
Jquery - Dicas e TruquesLambda 3
 
Como você está criando os seus objetos?
Como você está criando os seus objetos?Como você está criando os seus objetos?
Como você está criando os seus objetos?Lambda 3
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheirasLambda 3
 

Más de Lambda 3 (6)

Marketing de Produtos Digitais
Marketing de Produtos DigitaisMarketing de Produtos Digitais
Marketing de Produtos Digitais
 
Experiências, Erros e Acertos no Desenvolvimento de Projetos Ágeis
Experiências, Erros e Acertos no Desenvolvimento de Projetos ÁgeisExperiências, Erros e Acertos no Desenvolvimento de Projetos Ágeis
Experiências, Erros e Acertos no Desenvolvimento de Projetos Ágeis
 
Source Control
Source ControlSource Control
Source Control
 
Jquery - Dicas e Truques
Jquery - Dicas e TruquesJquery - Dicas e Truques
Jquery - Dicas e Truques
 
Como você está criando os seus objetos?
Como você está criando os seus objetos?Como você está criando os seus objetos?
Como você está criando os seus objetos?
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheiras
 

Funcional em F# e Scala: Programação Funcional