SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

PDF
Linguagem Prolog - Antonio Rufino
PDF
Listas em Prolog
PPTX
Estrutura de dados em Java - Filas
PDF
Estrutura de dados - Pilhas
PDF
Pilha e Fila Dinamica
PDF
Estrutura de dados - Filas
PPTX
Estrutura de dados em Java - Pilhas
PPTX
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
Linguagem Prolog - Antonio Rufino
Listas em Prolog
Estrutura de dados em Java - Filas
Estrutura de dados - Pilhas
Pilha e Fila Dinamica
Estrutura de dados - Filas
Estrutura de dados em Java - Pilhas
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python

Mais procurados (20)

PDF
Estrutura de Dados - Listas Encadeadas
PPTX
Estrutura de dados em Java - Filas
PPT
Aula Prolog 09 - Listas
PDF
Estrutura de dados - Implementação de filas com listas
PPTX
Recursividade
PDF
Pilha e Fila Estática
PPTX
Estrutura de dados em Java - Filas com lista encadeada
PPTX
Estruturas de dados em Python
PPTX
Apresentação recursividade rev2
PDF
Minicurso Prolog
PDF
Pilha e filas
PPTX
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
PDF
Apostila rpira
PPTX
PPT
Sentido
PPTX
Matlab – curso básico (1)
PPTX
PPTX
PPT
Calculo 2 aula 1 integral indefinida
Estrutura de Dados - Listas Encadeadas
Estrutura de dados em Java - Filas
Aula Prolog 09 - Listas
Estrutura de dados - Implementação de filas com listas
Recursividade
Pilha e Fila Estática
Estrutura de dados em Java - Filas com lista encadeada
Estruturas de dados em Python
Apresentação recursividade rev2
Minicurso Prolog
Pilha e filas
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Apostila rpira
Sentido
Matlab – curso básico (1)
Calculo 2 aula 1 integral indefinida
Anúncio

Destaque (19)

PPTX
WA Government Procurement
PDF
Small Shifts, Big Impact BLC13
DOCX
PDF
Process_Flow - PDF
PPTX
Internet
PDF
NOBUX Corporate Presentation Q1 2016 ENG
PDF
Plugging in: GaETC 2010
PDF
Bonisteel Birthday Bash
PDF
Evolving role of the CEO Dataquest 22June2010
PDF
Online marketing companies in india
PPTX
Novidades ALM Summit 2013
PDF
Small Shifts, Big Impact BLC12
ODP
ELS PRIMERS DIES A L'ESCOLA
PDF
Keynote Lambda Day
PDF
SaaS for e-Governance
PDF
PPTX
YourMarch Pitch deck
PPTX
Doritos
DOC
Voc les professions et autres+corrige
WA Government Procurement
Small Shifts, Big Impact BLC13
Process_Flow - PDF
Internet
NOBUX Corporate Presentation Q1 2016 ENG
Plugging in: GaETC 2010
Bonisteel Birthday Bash
Evolving role of the CEO Dataquest 22June2010
Online marketing companies in india
Novidades ALM Summit 2013
Small Shifts, Big Impact BLC12
ELS PRIMERS DIES A L'ESCOLA
Keynote Lambda Day
SaaS for e-Governance
YourMarch Pitch deck
Doritos
Voc les professions et autres+corrige
Anúncio

Semelhante a Técnicas de Programação Funcional (20)

PDF
Python e django na prática
PDF
Introdução ao paradigma funcional com scala
PDF
Programando em python recursao
PDF
Programação funcional tipada: uma introdução
PDF
O que é que o Java não tem?
PDF
Slide_Python.pdf
PDF
PDF
Programando em Python - Funções
PDF
Matemática
ODP
Pymordida0 Semana de computação da SOCIESC - 2008/10
PDF
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
PPTX
MATEMATICA-CONTINUAÇÃO-AULA02-ADS-UNINASSAU-PAULISTA-2025.pptx
PDF
Paradigma Funcional - Caso de Estudo Haskell
DOCX
Usando o winplot
KEY
Python 02
PDF
Tutorial aed iii 007 - algoritmo de ordenação heapsort
PDF
Programando em python funcoes
ODP
Linguagem R
PDF
Apostila 3 calculo i integrais
PDF
Por que dizemos que Scala é uma linguagem funcional?
Python e django na prática
Introdução ao paradigma funcional com scala
Programando em python recursao
Programação funcional tipada: uma introdução
O que é que o Java não tem?
Slide_Python.pdf
Programando em Python - Funções
Matemática
Pymordida0 Semana de computação da SOCIESC - 2008/10
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
MATEMATICA-CONTINUAÇÃO-AULA02-ADS-UNINASSAU-PAULISTA-2025.pptx
Paradigma Funcional - Caso de Estudo Haskell
Usando o winplot
Python 02
Tutorial aed iii 007 - algoritmo de ordenação heapsort
Programando em python funcoes
Linguagem R
Apostila 3 calculo i integrais
Por que dizemos que Scala é uma linguagem funcional?

Mais de Lambda 3 (6)

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

Técnicas de Programação Funcional