SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
B H D o j o
PROGRAMAÇÃO FUNCIONAL
Uma introdução
A METÁFORA DO
LENHADOR
2
As linguagens de programação estão se tornando funcionais gradualmente
3
POR QUÊ?
Linguaguagens funcionais existem desde sempre. Por que estão se
tornando populares somente agora?
4
PRINCÍPIOS BÁSICOS
5
EXPRESSION VS STATEMENT
• Statement(comando) não retorna um valor
• Expression(expressão) retorna um valor e raramente possui side
effects
6
Toda linguagem de programação funcional é orientada a expressões
7
PRINCÍPIOS BÁSICOS
• Imutabilidade
• Foco em funções, não em estado
• Funções são valores
• Recourses, não loops
8
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
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


}
FIZZBUZZ - FUNCIONAL
11
def fizzBuzz(number:Int) = (number % 3, number % 5) match {

case (0, 0) => 'fizzBuzz

case (0, _) => 'fizz

case (_, 0) => 'buzz

case _ => number

}
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)
UMA SIMPLES
REFATORAÇÃO…
De OO para funcional
13
REFATORANDO…
14
def printUpTo(limit: Int): Unit = {

var i = 0

while (i <= limit) {

println("i = " + i)

i += 1

}

}
REFATORANDO…
15
def printUpTo(limit: Int): Unit = {

for (i <- (0 to limit)) {

println("i = " + i)

}

}

}
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) 

}
Programação funcional se preocupa com "o que fazer" e não em
"como fazer"
17
Dúvidas?

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Php básico
Php básicoPhp básico
Php básico
 
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
 
Aula03 - JavaScript
Aula03 - JavaScriptAula03 - JavaScript
Aula03 - JavaScript
 
Excel VBA: Aula 3
Excel VBA: Aula 3Excel VBA: Aula 3
Excel VBA: Aula 3
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
 
Aula05 - Lógica de Programação
Aula05 - Lógica de ProgramaçãoAula05 - Lógica de Programação
Aula05 - Lógica de Programação
 
Excel VBA: Aula 9
Excel VBA: Aula 9Excel VBA: Aula 9
Excel VBA: Aula 9
 
Logica Algoritmo 04 Decisao
Logica Algoritmo 04 DecisaoLogica Algoritmo 04 Decisao
Logica Algoritmo 04 Decisao
 
Aula12- PHP
Aula12- PHPAula12- PHP
Aula12- PHP
 
Java básico - Módulo 04: Estruturas de controle
Java   básico - Módulo 04:  Estruturas de controleJava   básico - Módulo 04:  Estruturas de controle
Java básico - Módulo 04: Estruturas de controle
 
Sebenta Ling Prog Cptig MóDulo Iii Carla
Sebenta Ling Prog Cptig   MóDulo Iii CarlaSebenta Ling Prog Cptig   MóDulo Iii Carla
Sebenta Ling Prog Cptig MóDulo Iii Carla
 
Java básico - Módulo 05 - Estruturas de Repetição
Java  básico - Módulo 05 - Estruturas de RepetiçãoJava  básico - Módulo 05 - Estruturas de Repetição
Java básico - Módulo 05 - Estruturas de Repetição
 
4º Aula do Grupo de estudos sobre funções
4º Aula do Grupo de estudos sobre funções4º Aula do Grupo de estudos sobre funções
4º Aula do Grupo de estudos sobre funções
 
Aula3
Aula3Aula3
Aula3
 
Tratamento de exceções com PHP
Tratamento de exceções com PHPTratamento de exceções com PHP
Tratamento de exceções com PHP
 
Introducao a Lógica de Programação
Introducao a Lógica de ProgramaçãoIntroducao a Lógica de Programação
Introducao a Lógica de Programação
 
Aula11 - PHP
Aula11 - PHPAula11 - PHP
Aula11 - PHP
 
Aula14 - Funções em PHP
Aula14 - Funções em PHPAula14 - Funções em PHP
Aula14 - Funções em PHP
 
Apostila c
Apostila cApostila c
Apostila c
 

Destaque

Grade 4/5 Parent iPad Presentation
Grade 4/5 Parent iPad PresentationGrade 4/5 Parent iPad Presentation
Grade 4/5 Parent iPad Presentationmatthewlipstein
 
[@NaukriEngineering] IndexedDB
[@NaukriEngineering] IndexedDB[@NaukriEngineering] IndexedDB
[@NaukriEngineering] IndexedDBNaukri.com
 
The New Fair Labor Standards Act Regulations: Optimizing Implementation C...
 The New Fair Labor Standards Act Regulations: Optimizing Implementation C... The New Fair Labor Standards Act Regulations: Optimizing Implementation C...
The New Fair Labor Standards Act Regulations: Optimizing Implementation C...CBIZ, Inc.
 
Metodologias rup
Metodologias rupMetodologias rup
Metodologias rupgmjuan
 
Resume women educatorsociety
Resume women educatorsocietyResume women educatorsociety
Resume women educatorsocietymrsjenkins
 
Tech Days 2015: Customer Presentation Deep Blue Capital
Tech Days 2015: Customer Presentation Deep Blue CapitalTech Days 2015: Customer Presentation Deep Blue Capital
Tech Days 2015: Customer Presentation Deep Blue CapitalAdaCore
 
Running tests for every commit: Gerrit, Jenkins, Docker, AWS
Running tests for every commit: Gerrit, Jenkins, Docker, AWSRunning tests for every commit: Gerrit, Jenkins, Docker, AWS
Running tests for every commit: Gerrit, Jenkins, Docker, AWSAlexander Akbashev
 
Александр Куцан: "Static Code Analysis in C++"
Александр Куцан: "Static Code Analysis in C++" Александр Куцан: "Static Code Analysis in C++"
Александр Куцан: "Static Code Analysis in C++" Anna Shymchenko
 
Константин Маркович: "Creating modular application using Spring Boot "
Константин Маркович: "Creating modular application using Spring Boot "Константин Маркович: "Creating modular application using Spring Boot "
Константин Маркович: "Creating modular application using Spring Boot "Anna Shymchenko
 
Leverage
LeverageLeverage
LeverageMickey
 

Destaque (14)

Grade 4/5 Parent iPad Presentation
Grade 4/5 Parent iPad PresentationGrade 4/5 Parent iPad Presentation
Grade 4/5 Parent iPad Presentation
 
[@NaukriEngineering] IndexedDB
[@NaukriEngineering] IndexedDB[@NaukriEngineering] IndexedDB
[@NaukriEngineering] IndexedDB
 
The New Fair Labor Standards Act Regulations: Optimizing Implementation C...
 The New Fair Labor Standards Act Regulations: Optimizing Implementation C... The New Fair Labor Standards Act Regulations: Optimizing Implementation C...
The New Fair Labor Standards Act Regulations: Optimizing Implementation C...
 
Water Features Overland Park KS /Fountain Restoration Overland Park KS by Ka...
 Water Features Overland Park KS /Fountain Restoration Overland Park KS by Ka... Water Features Overland Park KS /Fountain Restoration Overland Park KS by Ka...
Water Features Overland Park KS /Fountain Restoration Overland Park KS by Ka...
 
Metodologias rup
Metodologias rupMetodologias rup
Metodologias rup
 
2015 Superior Glove Winter Catalog
2015 Superior Glove Winter Catalog2015 Superior Glove Winter Catalog
2015 Superior Glove Winter Catalog
 
Resume women educatorsociety
Resume women educatorsocietyResume women educatorsociety
Resume women educatorsociety
 
Tech Days 2015: Customer Presentation Deep Blue Capital
Tech Days 2015: Customer Presentation Deep Blue CapitalTech Days 2015: Customer Presentation Deep Blue Capital
Tech Days 2015: Customer Presentation Deep Blue Capital
 
Running tests for every commit: Gerrit, Jenkins, Docker, AWS
Running tests for every commit: Gerrit, Jenkins, Docker, AWSRunning tests for every commit: Gerrit, Jenkins, Docker, AWS
Running tests for every commit: Gerrit, Jenkins, Docker, AWS
 
Александр Куцан: "Static Code Analysis in C++"
Александр Куцан: "Static Code Analysis in C++" Александр Куцан: "Static Code Analysis in C++"
Александр Куцан: "Static Code Analysis in C++"
 
Константин Маркович: "Creating modular application using Spring Boot "
Константин Маркович: "Creating modular application using Spring Boot "Константин Маркович: "Creating modular application using Spring Boot "
Константин Маркович: "Creating modular application using Spring Boot "
 
resume 15
resume 15resume 15
resume 15
 
Mesolithic age
Mesolithic ageMesolithic age
Mesolithic age
 
Leverage
LeverageLeverage
Leverage
 

Semelhante a Programacao funcional dojo

Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação FuncionalNatan Mai
 
Programação funcional - o que é? Como aplicar? Quais os benefícios?
Programação funcional - o que é? Como aplicar? Quais os benefícios?Programação funcional - o que é? Como aplicar? Quais os benefícios?
Programação funcional - o que é? Como aplicar? Quais os benefícios?Gisely Lucas
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasNatanael Simões
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Luís Cobucci
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUACândido Sales Gomes
 
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...tdc-globalcode
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcionalNatan Mai
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçaossuserc6132d
 
Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)André Justi
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência JavaMario Jorge Pereira
 
Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxMarceloRosenbrock1
 

Semelhante a Programacao funcional dojo (20)

Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação Funcional
 
Programação funcional - o que é? Como aplicar? Quais os benefícios?
Programação funcional - o que é? Como aplicar? Quais os benefícios?Programação funcional - o que é? Como aplicar? Quais os benefícios?
Programação funcional - o que é? Como aplicar? Quais os benefícios?
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 
Shell script
Shell script Shell script
Shell script
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
 
Funções em C
Funções em CFunções em C
Funções em C
 
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçao
 
Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência Java
 
Programação funcional no dia a dia
Programação funcional no dia a diaProgramação funcional no dia a dia
Programação funcional no dia a dia
 
Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptx
 
2006 - Linguagem VB.ppt
2006 - Linguagem VB.ppt2006 - Linguagem VB.ppt
2006 - Linguagem VB.ppt
 
Aula python
Aula pythonAula python
Aula python
 
Linguagens de programação - Go
Linguagens de programação - GoLinguagens de programação - Go
Linguagens de programação - Go
 
Recursividade
RecursividadeRecursividade
Recursividade
 

Programacao funcional dojo