programacao funcional dojo

18
BH Dojo PROGRAMAÇÃO FUNCIONAL Uma introdução

Upload: francieli-viane

Post on 21-Jan-2017

91 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Programacao funcional dojo

B H D o j o

PROGRAMAÇÃO FUNCIONALUma introdução

Page 2: Programacao funcional dojo

A METÁFORA DO LENHADOR

2

Page 3: Programacao funcional dojo

As linguagens de programação estão se tornando funcionais gradualmente

3

Page 4: Programacao funcional dojo

POR QUÊ?Linguaguagens funcionais existem desde sempre. Por que estão se tornando populares somente agora?

4

Page 5: Programacao funcional dojo

PRINCÍPIOS BÁSICOS

5

Page 6: Programacao funcional dojo

EXPRESSION VS STATEMENT

• Statement(comando) não retorna um valor

• Expression(expressão) retorna um valor e raramente possui side effects

6

Page 7: Programacao funcional dojo

Toda linguagem de programação funcional é orientada a expressões

7

Page 8: Programacao funcional dojo

PRINCÍPIOS BÁSICOS

• Imutabilidade

• Foco em funções, não em estado

• Funções são valores

• Recourses, não loops

8

Page 9: Programacao funcional dojo

IMUTABILIDADE

• Thread Safety

• Sem efeitos colaterais

• Previne referência a null

• Evita acoplamento temporal

• O código se torna mais simples e mais fácil de testar

9

Page 10: Programacao funcional dojo

FIZZBUZZ - OO

10

def fizzBuzz(number: Int) = { var result = “"

if (number % 3 == 0 && number % 5 == 0) result = “fizzBuzz" if (number % 3 == 0) result = “fizz" if (number % 5 == 0) result = “buzz" else result }

Page 11: Programacao funcional dojo

FIZZBUZZ - FUNCIONAL

11

def fizzBuzz(number:Int) = (number % 3, number % 5) match { case (0, 0) => 'fizzBuzz case (0, _) => 'fizz case (_, 0) => 'buzz case _ => number}

Page 12: Programacao funcional dojo

FUNÇÕES DE ALTA ORDEM (HIGH ORDER FUNCTIONS)

São funções que:

• Recebem uma função como parâmetro

• Retorna uma função

Exemplo:

12

def trataErro = { //tratamento de erro...}

def lerArquivo(caminho, tratamentoErro) = { //leitura do arquivo}

lerArquivo("texto.txt", trataErro)

Page 13: Programacao funcional dojo

UMA SIMPLES REFATORAÇÃO…De OO para funcional

13

Page 14: Programacao funcional dojo

REFATORANDO…

14

def printUpTo(limit: Int): Unit = { var i = 0 while (i <= limit) { println("i = " + i) i += 1 } }

Page 15: Programacao funcional dojo

REFATORANDO…

15

def printUpTo(limit: Int): Unit = { for (i <- (0 to limit)) { println("i = " + i) } }}

Page 16: Programacao funcional dojo

REFATORANDO…

16

def printUpTo(limit: Int): Unit = { (0 to limit).foreach(println _) }

def printUpTo(limit: Int): Unit = { var i = 0 while (i <= limit) { println("i = " + i) i += 1 } }

def printUpTo(limit: Int): Unit = { (0 to limit).foreach(println) }

Page 17: Programacao funcional dojo

Programação funcional se preocupa com "o que fazer" e não em "como fazer"

17

Page 18: Programacao funcional dojo

Dúvidas?