SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Paradigmas de Programação
Ronaldo F. Ramos
Instituto Federal do Ceará
29 de outubro de 2023
PARTE 3 - PARADIGMA FUNCIONAL
PROGRAMAÇÃO FUNCIONAL EM JAVASCRIPT
AULA 1/1
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Roteiro
• Programação Funcional em JavaScript
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Definição
Em ciência da computação, programação funcional é um paradigma de programação
que trata a computação como uma avaliação de funções matemáticas e que evita
estados ou dados mutáveis. Ela enfatiza a aplicação de funções, em contraste da
programação imperativa, que enfatiza mudanças no estado do programa 1 2
1
Fonte: Wikipedia
2
Paul Hudak (setembro de 1989). "Conception, evolution, and application of functional
programming languages"(pdf) . ACM Computing Surveys.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Foco da Programação Funcional
• Manutenibilidade
• Testabilidade
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Um Programa Simples Não Funcional em Javascript
1 // definindo uma função
2 function saudacao_simples (nome,saudacao){
3 return saudacao+’ ’+nome;
4 }
5 console.log( saudacao_simples (’Pedro ’,’Ola Mói de Chifres ’));
Saída:
node .saudacao_simples.js
Ola Mói de Chifres Pedro
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Funções de Alta Ordem
Diz-se que Javascript trata funções como cidadãos de primeira classe. A seguir criamos
uma variável (constante e imutável) que é uma função e que retorna outra função.
1 const saudacao = function(saudacao){
2 return function(nome){
3 return saudacao+’ ’+nome;
4 }
5 }
6 // permitindo a especialização das funções
7 const saudacao_cearence = saudacao("Fala mói de chifres");
8 const saudacao_paulista = saudacao("Urra meu..")
9 const saudacao_carioca = saudacao(’Papo reto mano ’)
10 console.log( saudacao_cearence (’Pedro ’));
11 console.log( saudacao_paulista (’Pedro ’));
12 console.log( saudacao_carioca (’Pedro ’));
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Saídas
1 node .primeira_classe .js
2 Fala mói de chifres Pedro
3 Urra meu.. Pedro
4 Papo reto mano Pedro
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Loops Funcionais em Javascript
Vejamos um exemplo de Loops em sintaxe funcional em JS
1 // exemplos de loops
2 const numeros = [1,2,3,4,5]
3
4 // este é um exemplo de loop imperativo
5 for(i=0;i<numeros.length;i++){
6 console.log(numeros[i])
7 }
8
9 // o mesmo loop no formato declarativo funcional
10 numeros.forEach(function(i){
11 console.log(i);
12 })
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Simplificando com o uso de funções de seta
1 const numeros = [1,2,3,4,5]
2
3 const saida = i => console.log(i);
4
5 numeros.forEach(saida);
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Funções de Seta
A "arrow function"é uma forma mais concisa de escrever funções anônimas em
JavaScript, e ela é denotada pelo uso do operador =>. Ela é frequentemente utilizada
para criar funções de callback ou funções anônimas em situações em que a brevidade
do código é desejada.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Efeitos Colaterais - Side Effects
Problemas do ponto de vista da programação funcional(efeitos colaterais)
• A função construtora modifica variáveis fora do seu escopo
• As funções internas (não main) executam operações de entrada e saída
A existência de efeitos colaterais nos programas dificulta a compreensibilidade do
programa e sua manutenibilidade. Além disso o fato das variáveis serem mutáveis
também contribui para dificultar a rastreabilidade do mesmo.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Testabilidade
Procedimentos com efeitos colaterais, por não serem isolados, dificultam o processo de
testes.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Exemplos de Efeitos Colaterais
• Imprimir alguma coisa
• Ler um arquivo
• Escrever em um arquivo
• Interagir com uma base de dados
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Funções Puras
Regras para funções puras:
• Trabalha somente com dados que são passados para a mesma.
• Retorna sempre os mesmos resultados para as mesmas entradas.
• Não tem efeitos colaterais.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Exemplos
1 // exemplo de função pura
2 function addiciona(x,y){
3 return x + y;
4 }
5 // a mesma função impura
6 function addiciona(x,y){
7 console.log(x+y); // uso de efeito colateral torna a função
impura
8 return x + y;
9 }
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Objetos Imutáveis
A palavra reservada const torna variáveis e referências e mutáveis, mas não impede
que os atributos dos objetos mudem. Para isso pode-se usar os ’frozen objects’.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Exemplos de Imutabilidade
1 let x = 2; // mutável
2 const y = 2; // imutavel
3 x = 10;
4
5 y = 3; // TypeError: Assignment to constant variable.
6
7 const pessoa = {
8 nome:’jose ’,
9 profissao:’professor ’
10 }
11
12 pessoa = null; // TypeError: Assignment to constant variable.
13
14 pessoa.nome = ’Barteu ’; // sem problemas aqui
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Objeto Congelado
Uso de conjutos fixos (frozen)
1 const indices = Object.freeze ([0,1,2,3,4,5,6,7,8,9,]); // objeto
imutável
2
3 // criando outro objeto a partir do anterior (frozen)
4
5 function adicionaElemento (lista){
6 return Object.freeze ([...lista, lista.length ]);
7 }
8 console.log( adicionaElemento ( adicionaElemento (indices)));
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Mapas em Javascript
Javascript também possui a função Map com funcionalidade idêntica
1 const numeros = [1, 2, 3, 4, 5];
2 const duplicados = numeros.map(function(numero) {
3 return numero * 2;
4 });
5 console.log(duplicados); // [2, 4, 6, 8, 10]
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Filtros em Javascript
Exemplo de uso do filter em javascript
1 const nomes = ["Ana", "Bruno", "Carlos", "Alice", "Daniel"];
2 const nomesComA = nomes.filter(function(nome) {
3 return nome [0] === "A";
4 });
5 console.log(nomesComA); // ["Ana", "Alice "]
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Reduce
Exemplo de uso do Reduce em Javascript
1 const frase = "O rato roeu a roupa do rei de Roma";
2 const palavras = frase.split(" "); // ["O", "rato",..., "Roma"]
3 const frequencia = palavras.reduce ((obj, palavra) => {
4 // se palavra já existe incrementa o contador senão cria a chave
5 if (obj[palavra ]) {
6 obj[palavra ]++;
7 } else {
8 obj[palavra] = 1;
9 }
10 return obj;
11 }, {}); // inicia o objeto vazio
12 console.log(frequencia); // { O: 1, rato: 1, roeu: 1, a: 1, roupa: 1,
do: 1, rei: 1, de: 1, Roma: 1 }
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Currying
Conceito advindo do Cálculo Lambda nomeado em homenagem a Haskell Curry.
Vejamos a composição abaixo.
1 const fazerBolo = (ingredientes1) =>{
2 return (ingredientes2) => {
3 return (ingredientes3) => {
4 return ingredientes1 +’ ’ + ingredientes2 +’ ’ +
ingredientes3
5 }
6 }
7 }
8 /* o que temos acima é uma função fazerbolo que retorna uma
função anônima que também retorna uma função anônima ou seja
temos 3 funções com 3 argumentos diferentes */
9 const meuBolo = fazerBolo(’ovos ’)(’farinha ’)(’manteiga ’);
10 console.log(meuBolo);
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Currying - Cont
1 /* encadeando os parãmetros das funções ficamos assim */
2 const fbolo = (ingr1)=>(ingr2)=>(ingr3)=>ingr1+’ ’+ingr2+’ ’+ingr3;
3 const meubolo = fbolo(’ovos ’)(’farinha ’)(’manteiga ’);
4 console.log(meubolo);
Observe o que acontece com os returns dentro das funções. As funções mais internas
retornam uma formatação de função para as mais externas até que elas se fundem em
uma só função que retorna para o primeiro chamador.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Outro exemplo de Curry
1 /* mais uma explicacao par o curry */
2 const mutiplica = (x,y) => x * y;
3 console.log(mutiplica (2,3));
4
5 const multiplicacurry = y => x=> x * y;
6 console.log( multiplicacurry (2));
7 console.log( multiplicacurry (2) (3));
Saída:
1 6
2 [ Function (anonymous) ]
3 6
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Encadeamento de Chamadas com Pipe/Compose
Exemplo de uso do pipe e compose para processar nome em sequência
1 getNome = (pessoa) => pessoa.nome; // retorna o nome
2 maiusculas = (string) => string.toUpperCase (); // retorna maiúsculas
3 getPrenome = (string) => string.substring (0, 4); // pega o inicio
4 console.log(’1: ’+getPrenome(maiusculas(getNome ({ nome: ’Dino da
Silva Sauro ’ }))));
5 // um jeito mais limpo de fazer isso ????
6 const pipe = (...fns) => (x) => fns.reduce ((v, f) => f(v), x);
7 const compose = (...fns) => x => fns.reduceRight ((v, f) => f(v), x);
8 console.log(’2: ’+pipe(getNome,maiusculas,getPrenome)({ nome: ’Dino
da Silva Sauro ’ }));
9 console.log(’3: ’+compose(getPrenome,maiusculas,getNome)({ nome:
’Dino da Silva Sauro ’ }));
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Bibliotecas Funcionais
Javascript possui bibliotecas funcionais para ajudar a trabalhar de forma mais ajustada
a este paradigma.
Ver RAMDA
https://ramdajs.com/
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
Seguindo
Agora que vimos os conceitos básicos associados a programação funcional podemos
estudar linguagens puramente funcional.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
E N J O Y
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação

Mais conteúdo relacionado

Mais procurados

Exception Handling
Exception HandlingException Handling
Exception HandlingSunil OS
 
Java Basics V3
Java Basics V3Java Basics V3
Java Basics V3Sunil OS
 
Dts x dicoding #1 memulai pemrograman kotlin
Dts x dicoding #1 memulai pemrograman kotlinDts x dicoding #1 memulai pemrograman kotlin
Dts x dicoding #1 memulai pemrograman kotlinAhmad Arif Faizin
 
Aula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoAula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoVinícius de Paula
 
Java Threads and Concurrency
Java Threads and ConcurrencyJava Threads and Concurrency
Java Threads and ConcurrencySunil OS
 
PBD Select e restrições para Select
PBD Select e restrições para SelectPBD Select e restrições para Select
PBD Select e restrições para SelectElaine Cecília Gatto
 
Basic C Programming language
Basic C Programming languageBasic C Programming language
Basic C Programming languageAbhishek Soni
 
Seminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem PythonSeminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem PythonGiancarlo Silva
 
Curso Inteligência Artificial - Parte 1 -
Curso Inteligência Artificial - Parte 1 -Curso Inteligência Artificial - Parte 1 -
Curso Inteligência Artificial - Parte 1 -ronaldo ramos
 
JSON and PL/SQL: A Match Made in Database
JSON and PL/SQL: A Match Made in DatabaseJSON and PL/SQL: A Match Made in Database
JSON and PL/SQL: A Match Made in DatabaseSteven Feuerstein
 
Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaAdriano Teixeira de Souza
 
Hexagonal architecture - message-oriented software design (PHP Barcelona 2015)
Hexagonal architecture - message-oriented software design (PHP Barcelona 2015)Hexagonal architecture - message-oriented software design (PHP Barcelona 2015)
Hexagonal architecture - message-oriented software design (PHP Barcelona 2015)Matthias Noback
 
Algoritmos 1 - Semana 2
Algoritmos 1 - Semana 2Algoritmos 1 - Semana 2
Algoritmos 1 - Semana 2Eder Samaniego
 

Mais procurados (20)

Exception Handling
Exception HandlingException Handling
Exception Handling
 
Java Basics V3
Java Basics V3Java Basics V3
Java Basics V3
 
Aula 4 - Estruturas condicionais
Aula 4 - Estruturas condicionaisAula 4 - Estruturas condicionais
Aula 4 - Estruturas condicionais
 
Dts x dicoding #1 memulai pemrograman kotlin
Dts x dicoding #1 memulai pemrograman kotlinDts x dicoding #1 memulai pemrograman kotlin
Dts x dicoding #1 memulai pemrograman kotlin
 
Aula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoAula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de Projeto
 
Java Threads and Concurrency
Java Threads and ConcurrencyJava Threads and Concurrency
Java Threads and Concurrency
 
Exadata Backup
Exadata BackupExadata Backup
Exadata Backup
 
OOP V3.1
OOP V3.1OOP V3.1
OOP V3.1
 
Log4 J
Log4 JLog4 J
Log4 J
 
PBD Select e restrições para Select
PBD Select e restrições para SelectPBD Select e restrições para Select
PBD Select e restrições para Select
 
Algoritmos - Procedimentos
Algoritmos - ProcedimentosAlgoritmos - Procedimentos
Algoritmos - Procedimentos
 
Basic C Programming language
Basic C Programming languageBasic C Programming language
Basic C Programming language
 
JDBC
JDBCJDBC
JDBC
 
Seminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem PythonSeminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem Python
 
Curso Inteligência Artificial - Parte 1 -
Curso Inteligência Artificial - Parte 1 -Curso Inteligência Artificial - Parte 1 -
Curso Inteligência Artificial - Parte 1 -
 
JSON and PL/SQL: A Match Made in Database
JSON and PL/SQL: A Match Made in DatabaseJSON and PL/SQL: A Match Made in Database
JSON and PL/SQL: A Match Made in Database
 
Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memória
 
Data Types In PHP
Data Types In PHPData Types In PHP
Data Types In PHP
 
Hexagonal architecture - message-oriented software design (PHP Barcelona 2015)
Hexagonal architecture - message-oriented software design (PHP Barcelona 2015)Hexagonal architecture - message-oriented software design (PHP Barcelona 2015)
Hexagonal architecture - message-oriented software design (PHP Barcelona 2015)
 
Algoritmos 1 - Semana 2
Algoritmos 1 - Semana 2Algoritmos 1 - Semana 2
Algoritmos 1 - Semana 2
 

Semelhante a javascript_funcional.pdf

python_funcional.pdf
python_funcional.pdfpython_funcional.pdf
python_funcional.pdfronaldo ramos
 
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
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03thomasdacosta
 
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
 
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroVisual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroRogério Moraes de Carvalho
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcionalNatan Mai
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao rubyFrancis Wagner
 
Sistemas operacionais de rede exercicio de sala-shellscript
Sistemas operacionais de rede exercicio de sala-shellscriptSistemas operacionais de rede exercicio de sala-shellscript
Sistemas operacionais de rede exercicio de sala-shellscriptCarlos Melo
 
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
 

Semelhante a javascript_funcional.pdf (20)

python_funcional.pdf
python_funcional.pdfpython_funcional.pdf
python_funcional.pdf
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
Javascript
JavascriptJavascript
Javascript
 
Tdc2010 web
Tdc2010 webTdc2010 web
Tdc2010 web
 
Javascript
Javascript Javascript
Javascript
 
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
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Comandos e expressões
Comandos e expressõesComandos e expressões
Comandos e expressões
 
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?
 
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroVisual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao ruby
 
Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 
Aula 7 aed - sub algoritmos
Aula 7   aed - sub algoritmosAula 7   aed - sub algoritmos
Aula 7 aed - sub algoritmos
 
Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 
Sistemas operacionais de rede exercicio de sala-shellscript
Sistemas operacionais de rede exercicio de sala-shellscriptSistemas operacionais de rede exercicio de sala-shellscript
Sistemas operacionais de rede exercicio de sala-shellscript
 
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)
 
Aula1
Aula1Aula1
Aula1
 

Mais de ronaldo ramos

Mais de ronaldo ramos (20)

03_lisp.pdf
03_lisp.pdf03_lisp.pdf
03_lisp.pdf
 
02_lisp.pdf
02_lisp.pdf02_lisp.pdf
02_lisp.pdf
 
01_lisp.pdf
01_lisp.pdf01_lisp.pdf
01_lisp.pdf
 
_001_introducao.pdf
_001_introducao.pdf_001_introducao.pdf
_001_introducao.pdf
 
paradigmas_de_programacao_2_X.pdf
paradigmas_de_programacao_2_X.pdfparadigmas_de_programacao_2_X.pdf
paradigmas_de_programacao_2_X.pdf
 
paradigmas_de_programacao_1_X.pdf
paradigmas_de_programacao_1_X.pdfparadigmas_de_programacao_1_X.pdf
paradigmas_de_programacao_1_X.pdf
 
paradigmas_de_programacao.pdf
paradigmas_de_programacao.pdfparadigmas_de_programacao.pdf
paradigmas_de_programacao.pdf
 
paradigmas_de_programacao_3_X.pdf
paradigmas_de_programacao_3_X.pdfparadigmas_de_programacao_3_X.pdf
paradigmas_de_programacao_3_X.pdf
 
40-aula40.pdf
40-aula40.pdf40-aula40.pdf
40-aula40.pdf
 
43-aula43.pdf
43-aula43.pdf43-aula43.pdf
43-aula43.pdf
 
48-aula48-modelosTemporais.pdf
48-aula48-modelosTemporais.pdf48-aula48-modelosTemporais.pdf
48-aula48-modelosTemporais.pdf
 
47-aula47-fuzzy-aplicacao.pdf
47-aula47-fuzzy-aplicacao.pdf47-aula47-fuzzy-aplicacao.pdf
47-aula47-fuzzy-aplicacao.pdf
 
46-aula46-fuzzy.pdf
46-aula46-fuzzy.pdf46-aula46-fuzzy.pdf
46-aula46-fuzzy.pdf
 
42-aula42.pdf
42-aula42.pdf42-aula42.pdf
42-aula42.pdf
 
39-aula39.pdf
39-aula39.pdf39-aula39.pdf
39-aula39.pdf
 
38-aula38.pdf
38-aula38.pdf38-aula38.pdf
38-aula38.pdf
 
36-aula36.pdf
36-aula36.pdf36-aula36.pdf
36-aula36.pdf
 
35-aula35.pdf
35-aula35.pdf35-aula35.pdf
35-aula35.pdf
 
34-aula34.pdf
34-aula34.pdf34-aula34.pdf
34-aula34.pdf
 
33-aula33.pdf
33-aula33.pdf33-aula33.pdf
33-aula33.pdf
 

Último

William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfAdrianaCunha84
 
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdf
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdfCD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdf
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdfManuais Formação
 
[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptx[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptxLinoReisLino
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxkarinedarozabatista
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxLuizHenriquedeAlmeid6
 
Livro O QUE É LUGAR DE FALA - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA  - Autora Djamila RibeiroLivro O QUE É LUGAR DE FALA  - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA - Autora Djamila RibeiroMarcele Ravasio
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 
Nova BNCC Atualizada para novas pesquisas
Nova BNCC Atualizada para novas pesquisasNova BNCC Atualizada para novas pesquisas
Nova BNCC Atualizada para novas pesquisasraveccavp
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManuais Formação
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasRosalina Simão Nunes
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -Aline Santana
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBAline Santana
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxRonys4
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfManuais Formação
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Centro Jacques Delors
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasCassio Meira Jr.
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.silves15
 

Último (20)

William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdf
 
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdf
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdfCD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdf
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdf
 
[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptx[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptx
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
 
Em tempo de Quaresma .
Em tempo de Quaresma                            .Em tempo de Quaresma                            .
Em tempo de Quaresma .
 
Livro O QUE É LUGAR DE FALA - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA  - Autora Djamila RibeiroLivro O QUE É LUGAR DE FALA  - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA - Autora Djamila Ribeiro
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
Nova BNCC Atualizada para novas pesquisas
Nova BNCC Atualizada para novas pesquisasNova BNCC Atualizada para novas pesquisas
Nova BNCC Atualizada para novas pesquisas
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envio
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdf
 
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades Motoras
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.
 

javascript_funcional.pdf

  • 1. Paradigmas de Programação Ronaldo F. Ramos Instituto Federal do Ceará 29 de outubro de 2023
  • 2. PARTE 3 - PARADIGMA FUNCIONAL PROGRAMAÇÃO FUNCIONAL EM JAVASCRIPT AULA 1/1 Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 3. Roteiro • Programação Funcional em JavaScript Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 4. Definição Em ciência da computação, programação funcional é um paradigma de programação que trata a computação como uma avaliação de funções matemáticas e que evita estados ou dados mutáveis. Ela enfatiza a aplicação de funções, em contraste da programação imperativa, que enfatiza mudanças no estado do programa 1 2 1 Fonte: Wikipedia 2 Paul Hudak (setembro de 1989). "Conception, evolution, and application of functional programming languages"(pdf) . ACM Computing Surveys. Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 5. Foco da Programação Funcional • Manutenibilidade • Testabilidade Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 6. Um Programa Simples Não Funcional em Javascript 1 // definindo uma função 2 function saudacao_simples (nome,saudacao){ 3 return saudacao+’ ’+nome; 4 } 5 console.log( saudacao_simples (’Pedro ’,’Ola Mói de Chifres ’)); Saída: node .saudacao_simples.js Ola Mói de Chifres Pedro Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 7. Funções de Alta Ordem Diz-se que Javascript trata funções como cidadãos de primeira classe. A seguir criamos uma variável (constante e imutável) que é uma função e que retorna outra função. 1 const saudacao = function(saudacao){ 2 return function(nome){ 3 return saudacao+’ ’+nome; 4 } 5 } 6 // permitindo a especialização das funções 7 const saudacao_cearence = saudacao("Fala mói de chifres"); 8 const saudacao_paulista = saudacao("Urra meu..") 9 const saudacao_carioca = saudacao(’Papo reto mano ’) 10 console.log( saudacao_cearence (’Pedro ’)); 11 console.log( saudacao_paulista (’Pedro ’)); 12 console.log( saudacao_carioca (’Pedro ’)); Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 8. Saídas 1 node .primeira_classe .js 2 Fala mói de chifres Pedro 3 Urra meu.. Pedro 4 Papo reto mano Pedro Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 9. Loops Funcionais em Javascript Vejamos um exemplo de Loops em sintaxe funcional em JS 1 // exemplos de loops 2 const numeros = [1,2,3,4,5] 3 4 // este é um exemplo de loop imperativo 5 for(i=0;i<numeros.length;i++){ 6 console.log(numeros[i]) 7 } 8 9 // o mesmo loop no formato declarativo funcional 10 numeros.forEach(function(i){ 11 console.log(i); 12 }) Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 10. Simplificando com o uso de funções de seta 1 const numeros = [1,2,3,4,5] 2 3 const saida = i => console.log(i); 4 5 numeros.forEach(saida); Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 11. Funções de Seta A "arrow function"é uma forma mais concisa de escrever funções anônimas em JavaScript, e ela é denotada pelo uso do operador =>. Ela é frequentemente utilizada para criar funções de callback ou funções anônimas em situações em que a brevidade do código é desejada. Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 12. Efeitos Colaterais - Side Effects Problemas do ponto de vista da programação funcional(efeitos colaterais) • A função construtora modifica variáveis fora do seu escopo • As funções internas (não main) executam operações de entrada e saída A existência de efeitos colaterais nos programas dificulta a compreensibilidade do programa e sua manutenibilidade. Além disso o fato das variáveis serem mutáveis também contribui para dificultar a rastreabilidade do mesmo. Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 13. Testabilidade Procedimentos com efeitos colaterais, por não serem isolados, dificultam o processo de testes. Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 14. Exemplos de Efeitos Colaterais • Imprimir alguma coisa • Ler um arquivo • Escrever em um arquivo • Interagir com uma base de dados Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 15. Funções Puras Regras para funções puras: • Trabalha somente com dados que são passados para a mesma. • Retorna sempre os mesmos resultados para as mesmas entradas. • Não tem efeitos colaterais. Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 16. Exemplos 1 // exemplo de função pura 2 function addiciona(x,y){ 3 return x + y; 4 } 5 // a mesma função impura 6 function addiciona(x,y){ 7 console.log(x+y); // uso de efeito colateral torna a função impura 8 return x + y; 9 } Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 17. Objetos Imutáveis A palavra reservada const torna variáveis e referências e mutáveis, mas não impede que os atributos dos objetos mudem. Para isso pode-se usar os ’frozen objects’. Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 18. Exemplos de Imutabilidade 1 let x = 2; // mutável 2 const y = 2; // imutavel 3 x = 10; 4 5 y = 3; // TypeError: Assignment to constant variable. 6 7 const pessoa = { 8 nome:’jose ’, 9 profissao:’professor ’ 10 } 11 12 pessoa = null; // TypeError: Assignment to constant variable. 13 14 pessoa.nome = ’Barteu ’; // sem problemas aqui Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 19. Objeto Congelado Uso de conjutos fixos (frozen) 1 const indices = Object.freeze ([0,1,2,3,4,5,6,7,8,9,]); // objeto imutável 2 3 // criando outro objeto a partir do anterior (frozen) 4 5 function adicionaElemento (lista){ 6 return Object.freeze ([...lista, lista.length ]); 7 } 8 console.log( adicionaElemento ( adicionaElemento (indices))); Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 20. Mapas em Javascript Javascript também possui a função Map com funcionalidade idêntica 1 const numeros = [1, 2, 3, 4, 5]; 2 const duplicados = numeros.map(function(numero) { 3 return numero * 2; 4 }); 5 console.log(duplicados); // [2, 4, 6, 8, 10] Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 21. Filtros em Javascript Exemplo de uso do filter em javascript 1 const nomes = ["Ana", "Bruno", "Carlos", "Alice", "Daniel"]; 2 const nomesComA = nomes.filter(function(nome) { 3 return nome [0] === "A"; 4 }); 5 console.log(nomesComA); // ["Ana", "Alice "] Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 22. Reduce Exemplo de uso do Reduce em Javascript 1 const frase = "O rato roeu a roupa do rei de Roma"; 2 const palavras = frase.split(" "); // ["O", "rato",..., "Roma"] 3 const frequencia = palavras.reduce ((obj, palavra) => { 4 // se palavra já existe incrementa o contador senão cria a chave 5 if (obj[palavra ]) { 6 obj[palavra ]++; 7 } else { 8 obj[palavra] = 1; 9 } 10 return obj; 11 }, {}); // inicia o objeto vazio 12 console.log(frequencia); // { O: 1, rato: 1, roeu: 1, a: 1, roupa: 1, do: 1, rei: 1, de: 1, Roma: 1 } Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 23. Currying Conceito advindo do Cálculo Lambda nomeado em homenagem a Haskell Curry. Vejamos a composição abaixo. 1 const fazerBolo = (ingredientes1) =>{ 2 return (ingredientes2) => { 3 return (ingredientes3) => { 4 return ingredientes1 +’ ’ + ingredientes2 +’ ’ + ingredientes3 5 } 6 } 7 } 8 /* o que temos acima é uma função fazerbolo que retorna uma função anônima que também retorna uma função anônima ou seja temos 3 funções com 3 argumentos diferentes */ 9 const meuBolo = fazerBolo(’ovos ’)(’farinha ’)(’manteiga ’); 10 console.log(meuBolo); Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 24. Currying - Cont 1 /* encadeando os parãmetros das funções ficamos assim */ 2 const fbolo = (ingr1)=>(ingr2)=>(ingr3)=>ingr1+’ ’+ingr2+’ ’+ingr3; 3 const meubolo = fbolo(’ovos ’)(’farinha ’)(’manteiga ’); 4 console.log(meubolo); Observe o que acontece com os returns dentro das funções. As funções mais internas retornam uma formatação de função para as mais externas até que elas se fundem em uma só função que retorna para o primeiro chamador. Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 25. Outro exemplo de Curry 1 /* mais uma explicacao par o curry */ 2 const mutiplica = (x,y) => x * y; 3 console.log(mutiplica (2,3)); 4 5 const multiplicacurry = y => x=> x * y; 6 console.log( multiplicacurry (2)); 7 console.log( multiplicacurry (2) (3)); Saída: 1 6 2 [ Function (anonymous) ] 3 6 Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 26. Encadeamento de Chamadas com Pipe/Compose Exemplo de uso do pipe e compose para processar nome em sequência 1 getNome = (pessoa) => pessoa.nome; // retorna o nome 2 maiusculas = (string) => string.toUpperCase (); // retorna maiúsculas 3 getPrenome = (string) => string.substring (0, 4); // pega o inicio 4 console.log(’1: ’+getPrenome(maiusculas(getNome ({ nome: ’Dino da Silva Sauro ’ })))); 5 // um jeito mais limpo de fazer isso ???? 6 const pipe = (...fns) => (x) => fns.reduce ((v, f) => f(v), x); 7 const compose = (...fns) => x => fns.reduceRight ((v, f) => f(v), x); 8 console.log(’2: ’+pipe(getNome,maiusculas,getPrenome)({ nome: ’Dino da Silva Sauro ’ })); 9 console.log(’3: ’+compose(getPrenome,maiusculas,getNome)({ nome: ’Dino da Silva Sauro ’ })); Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 27. Bibliotecas Funcionais Javascript possui bibliotecas funcionais para ajudar a trabalhar de forma mais ajustada a este paradigma. Ver RAMDA https://ramdajs.com/ Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 28. Seguindo Agora que vimos os conceitos básicos associados a programação funcional podemos estudar linguagens puramente funcional. Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação
  • 29. E N J O Y Ronaldo F. Ramos Instituto Federal do Ceará Paradigmas de Programação