paradigmas de programação - amazon s3 · programação funcional que facilita a utilização de...
TRANSCRIPT
![Page 1: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/1.jpg)
Marcel Gonçalves dos Santos
@marcelgsantos
paradigmas de programaçãouma visão geral sobre orientação a objetos
e programação funcional
![Page 2: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/2.jpg)
pensandonaweb.com.br
desenvolvedor web full-stack
Marcel Gonçalves dos Santos
@marcelgsantos
![Page 3: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/3.jpg)
![Page 4: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/4.jpg)
@femugspsp.femug.com
![Page 5: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/5.jpg)
@phpspphpsp.org.br
![Page 6: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/6.jpg)
Interaja nas mídias sociais!
- fale sobre o evento, palestrantes e conteúdo - tire fotos do evento e publique- interaja com outros participantes do evento - tire dúvidas ou dê feedbacks para os palestrantes
![Page 7: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/7.jpg)
1. seguir @marcelgsantos no Twitter2. tuitar utilizando as hashtags #TheDevConf, #TrilhaJavaScript e #JavaScript3. não vale tuíte em branco e retuíte4. ler e preencher este simples formulário bit.ly/sorteio-tdc-3
Concorra a um livro da Casa do Código! 🤩
![Page 8: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/8.jpg)
O que é paradigma de programação?
![Page 9: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/9.jpg)
são modelos ou estilos de programação suportados por linguagens que agrupam certas características comuns
![Page 10: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/10.jpg)
os paradigmas de programação definem como os códigos são estruturados…
![Page 11: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/11.jpg)
principais paradigmas de programaçãoos dois principais paradigmas são o imperativo e o declarativo
![Page 12: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/12.jpg)
paradigma imperativodescreve a resolução de um problema através de comandos que o computador pode compreender e executar
![Page 13: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/13.jpg)
paradigma imperativoos paradigmas procedural e orientado a objetos são exemplos de paradigmas imperativos
![Page 14: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/14.jpg)
let result = 0;
!// Imperative code to sum 1 to 10 for (let i = 0; i !<= 10; i!++) { result += i; }
console.log(result); !// 55
![Page 15: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/15.jpg)
paradigma declarativopermite especificar o que deve ser computado e não como deve ser computado
![Page 16: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/16.jpg)
paradigma declarativoos paradigmas funcional e lógico são exemplos de paradigmas declarativos
![Page 17: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/17.jpg)
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
!// Declarative code to sum 1 to 10 const sum = (a, b) !=> a + b; const result = numbers.reduce(sum);
console.log(result);
![Page 18: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/18.jpg)
paradigmas de linguagens de programação
imperativoprocedural - C e Pascal orientado a objetos - C++, Java, PHP, Python e Rubydeclarativológico - Prolog funcional - Clojure, Elixir, Elm, Erlang, F#, Haskell, Lisp, OCaml e Scala
![Page 19: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/19.jpg)
Programação Orientada a Objetos
![Page 20: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/20.jpg)
trata da comunicação entre objetos através da troca de mensagens
![Page 21: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/21.jpg)
um objeto é uma representação concreta de uma abstração…
![Page 22: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/22.jpg)
…que possui características, comportamentos e estado atual
![Page 23: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/23.jpg)
a orientação a objetos pode ser baseada em classes ou baseada em protótipos
![Page 24: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/24.jpg)
em programação orientada a objetos baseada em classes as classes são definidas de antemão e objetos são instanciados baseados em classes
![Page 25: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/25.jpg)
!// class to create a Person object class Person { constructor(name, age) { this.name = name; this.age = age; }
!// sayName method sayName() { console.log('Hi, my name is ' + this.name + '!'); } }
!// create an instance of Person let person = new Person('John', 32); person.sayName(); !// Hi, my name is John!
![Page 26: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/26.jpg)
em programação orientada a objetos baseada em protótipos os objetos são as entidades primárias e não existe nenhuma classe
![Page 27: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/27.jpg)
!// constructor function to create a Person object function Person(name, age) { this.name = name; this.age = age; }
!// sayName method is added to the prototype of Person Person.prototype.sayName = function() { console.log('Hi, my name is ' + this.name + '!'); };
!// create an instance of Person let person = new Person('John', 32); person.sayName(); !// Hi, my name is John!
![Page 28: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/28.jpg)
em JavaScript, as classes são açúcar sintático para funções construtoras
![Page 29: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/29.jpg)
!// constructor functions to create a Person object class Person { constructor(name, age) { this.name = name; this.age = age; }
sayName() { console.log('Hi, my name is ' + this.name + '!'); } }
!// add sayAge method to the Person prototype Person.prototype.sayAge = function() { console.log('I\'m ' + this.age + ' years old!'); };
!// create an instance of Person let person = new Person('John', 32); person.sayName(); !// Hi, my name is John! person.sayAge(); !// I'm 32 years old!
![Page 30: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/30.jpg)
o protótipo de um objeto é apenas outro objeto que o objeto é ligado
![Page 31: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/31.jpg)
todo objeto possui uma ligação com o protótipo (e apenas uma)
![Page 32: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/32.jpg)
novos objetos são criados baseados em objetos já existentes escolhidos como seu protótipo
![Page 33: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/33.jpg)
Pilares da Orientação a Objetos
![Page 34: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/34.jpg)
abstraçãotrata da representação de um objeto da vida real dentro do sistema
![Page 35: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/35.jpg)
!// class to create a Person object class Person { constructor(name, age) { this.name = name; this.age = age; }
!// sayName method sayName() { console.log('Hi, my name is ' + this.name + '!'); } }
!// create an instance of Person let person = new Person('John', 32); person.sayName(); !// Hi, my name is John!
![Page 36: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/36.jpg)
herançapermite o reaproveitamento de código em que uma classe herda características e atributos de uma classe base
![Page 37: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/37.jpg)
encapsulamento permite ocultar a implementação interna de um objeto
![Page 38: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/38.jpg)
!// hiding data through convention class Person { constructor(name, age) { this._name = name; this._age = age; }
sayName() { console.log('Hi, my name is ' + this._name + '!'); } }
!// create an instance of Person let person = new Person('John', 'Doe', 32);
!// accessing hiding data console.log(person._name); !// John
![Page 39: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/39.jpg)
!// hiding data using private fields class Person { #name; #age; constructor(name, age) { this.#name = name; this.#age = age; }
sayName() { console.log('Hi, my name is ' + this.#name + '!'); } }
let person = new Person('John', 'Doe', 32);
!// accessing through accessor method and property console.log(person.sayName()); !// Hi, my name is John! console.log(person.name); !// undefined console.log(person.#name); !// Uncaught SyntaxError: Undefined private field #name: must be declared in an enclosing class
![Page 40: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/40.jpg)
polimorfismoconsiste na alteração do funcionamento interno de um método herdado do pai
![Page 41: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/41.jpg)
Princípios da Orientação a Objetos
![Page 42: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/42.jpg)
os princípios de design ajudam a projetar códigos melhores
![Page 43: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/43.jpg)
coesãoindica o grau de relação entre os membros de um módulo
![Page 44: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/44.jpg)
!// not cohesive class class Cart { constructor() { this._items = []; }
numberOfItems() { return this._length; }
calculateDeliveryPrice() { !// code used to calculate the delivery price } }
![Page 45: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/45.jpg)
acoplamentoindica o grau de dependência entre módulos
![Page 46: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/46.jpg)
o acoplamento ocorre quando o código de um módulo utiliza código de outro módulo, seja ao chamar uma função ou acessar algum dado
![Page 47: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/47.jpg)
class Engine { start() { console.log('Starting the engine'); } }class Car { constructor() { this.engine = new Engine; }
start() { this.engine.start(); } }
!// create an instance of Car let toyota = new Car(); toyota.start(); !// Starting the engine
![Page 48: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/48.jpg)
ao controlar o acoplamento, o software torna-se mais flexível e fácil de manter
![Page 49: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/49.jpg)
pode-se reduzir o acoplamento através da injeção de dependências
![Page 50: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/50.jpg)
class Engine { start() { console.log('Starting the engine'); } }
class Car { constructor(engine) { this.engine = engine; }
start() { this.engine.start(); } }
!// injecting an engine dependency into the car let engine = new Engine(); let toyota = new Car(engine); toyota.start(); !// Starting the engine
![Page 51: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/51.jpg)
utilizar injeção de dependências auxilia nos testes unitários pois tornam os módulos fracamente acoplados, altamente coesos e facilita o mocking de objetos
![Page 52: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/52.jpg)
“prefira classes com alta coesão e baixo acoplamento”
![Page 53: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/53.jpg)
Programação Funcional λ
![Page 54: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/54.jpg)
paradigma de programação que utiliza funções puras e foca na transformação do estado
![Page 55: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/55.jpg)
baseado no cálculo lambda proposto por Alonzo Church na década de 30
![Page 56: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/56.jpg)
na programação funcional as funções são tratadas como conceito principal
![Page 57: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/57.jpg)
Uma função matemática trata-se de um simples mapeamento entre o domínio e o contra-domínio.
1
2
3
D
B
A
C
X Y
![Page 58: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/58.jpg)
Estado λ
![Page 59: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/59.jpg)
o estado de um programa é representado pelos valores dos dados armazenados na memória…
![Page 60: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/60.jpg)
…em qualquer ponto de execução do programa
![Page 61: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/61.jpg)
o estado de uma aplicação é alterado a cada interação feita pelo usuário ou pelo próprio sistema…
![Page 62: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/62.jpg)
…e pode ser representado por uma estrutura de dados
![Page 63: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/63.jpg)
a maioria dos bugs são relacionados ao controle de estado
![Page 64: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/64.jpg)
Funções Puras λ
![Page 65: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/65.jpg)
funções puras
1. ter parâmetros de entrada 2. não depender do estado externo 3. retorno baseado nos valores de entrada 4. não devem causar efeitos colaterais
![Page 66: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/66.jpg)
!// pure or impure function?
let counter = 0;
function increment() { counter!++; return counter; }
console.log(increment()); !// 1
![Page 67: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/67.jpg)
!// pure function (ES5 syntax)
function add(x, y) { return x + y; }
console.log(add(2, 3)); !// 5
![Page 68: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/68.jpg)
!// pure function (ES6 syntax)
const add = (x, y) !=> x + y;
console.log(add(2, 3)); !// 5
![Page 69: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/69.jpg)
por que utilizar funções puras?são reutilizáveis, componíveis, fáceis de testar, fáceis de cachear e paralelizáveis
![Page 70: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/70.jpg)
transparência referencialpropriedade que garante que a saída de uma função pura sempre será a mesma dado um mesmo conjunto de argumentos
![Page 71: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/71.jpg)
!// referential transparency
const add = (x, y) !=> x + y;
console.log(add(2, 3) !!=== 5); !// true console.log(5 !!=== 5); !// true
![Page 72: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/72.jpg)
pode não ser fácil criar funções puras
![Page 73: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/73.jpg)
porém, a restritividade ajuda a melhorar o foco
![Page 74: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/74.jpg)
Mais sobre Funções λ
![Page 75: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/75.jpg)
funções de alta ordem e funções de primeira classe são funções que podem ser atribuídas a variáveis, passadas como argumentos e retornadas de uma função
![Page 76: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/76.jpg)
!// high-order function
const add = (x, y) !=> x + y; const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce(add); const sum10 = numbers.reduce(add, 10);
console.log(sum); !// 15 console.log(sum10); !// 25
![Page 77: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/77.jpg)
funções anônimasfunções que não possuem nome e que, geralmente, são passadas como argumento ou atribuídas
![Page 78: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/78.jpg)
!// anonymous function
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((x, y) !=> x + y);
console.log(sum); !// 15
![Page 79: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/79.jpg)
closuresfunções que possuem acesso à valores do escopo externo
![Page 80: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/80.jpg)
!// closure function
function greet(greeting) { return function (name) { return `${greeting} ${name}!`; }; }
const greet2 = greeting !=> name !=> `${greeting} ${name}!`;
console.log(greet('Hello')('Mary')); !// Hello Mary! console.log(greet2('Hello')('John')); !// Hello John!
![Page 81: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/81.jpg)
recursãoé quando uma função é definida em termos de si própria, ou seja, quando a função chama ela mesma
![Page 82: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/82.jpg)
diferença entre função e procedimento (procedure)uma função recebe um valor e retorna um resultado; um procedimento é um conjunto de comandos executados numa ordem
![Page 83: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/83.jpg)
“Don't think of functions as a collection of instructions. Think of them as non-destructive operations on input `double = n => n * 2;`”Eric Elliott, 2016.
https://twitter.com/_ericelliott/status/685172918784004097
![Page 84: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/84.jpg)
memoizetécnica que permite que funções custosas sejam cacheadas para execuções posteriores mais rápidas
![Page 85: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/85.jpg)
Imutabilidade λ
![Page 86: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/86.jpg)
a imutabilidade diz que um dado não pode ser alterado após a sua criação
![Page 87: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/87.jpg)
a imutabilidade permite maior confiança e evita que erros ocorram
![Page 88: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/88.jpg)
o JavaScript não possui suporte a dados imutáveis de forma nativa
![Page 89: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/89.jpg)
porém, pode-se trabalhar com dados imutáveis em JavaScript utilizando algumas técnicas
![Page 90: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/90.jpg)
Currying e aplicação parcialλ
![Page 91: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/91.jpg)
o currying é a técnica que permite transformar uma função que recebe múltiplos argumentos…
![Page 92: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/92.jpg)
…em uma função que recebe apenas um argumento e que retorna uma função que aceita os argumentos restantes
![Page 93: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/93.jpg)
a aplicação parcial é quando se executa uma função e passa apenas parte de seus argumentos
![Page 94: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/94.jpg)
a aplicação parcial permite fazer a especialização de uma função mais genérica
![Page 95: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/95.jpg)
!// specialization from a curried function !// using partial application
const greet = R.curry((greeting, name) !=> `${greeting} ${name}`); const greetMorning = greet('Good Morning');
console.log(greetMorning('Alice')); !// Good Morning Alice
![Page 96: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/96.jpg)
currying e aplicação parcial são recursos muito utilizados em programação funcional
![Page 97: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/97.jpg)
na programação funcional deve-se levar em consideração a ordem dos parâmetros
![Page 98: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/98.jpg)
os parâmetros mais genéricos devem vir mais para o início e os parâmetros mais específicos devem vir mais para o final
![Page 99: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/99.jpg)
o JavaScript não possui suporte nativo para currying como nas linguagens puramente funcionais Elm ou Haskell
![Page 100: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/100.jpg)
Composição de Funções λ
![Page 101: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/101.jpg)
a composição é o processo de combinar uma ou mais funções para criar uma nova função
![Page 102: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/102.jpg)
!// creating a new function from others by composition
const sentence = 'estava à toa na vida o meu amor me chamou pra ver a banda passar cantando coisas de amor '; const wordCount = R.length(R.split(' ', sentence));
console.log(wordCount); !// 19
![Page 103: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/103.jpg)
é uma solução elegante e legível e ajuda a evitar a utilização do aninhamento de funções
![Page 104: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/104.jpg)
o Ramda possui uma função que permite criar uma nova função a partir da composição de funções
![Page 105: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/105.jpg)
!// create a function using composition
const sentence = 'estava à toa na vida o meu amor me chamou pra ver a banda passar cantando coisas de amor '; const countWords = R.compose(R.length, R.split);
console.log(countWords(' ', sentence)); !// 19
![Page 106: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/106.jpg)
BibliotecaRamda λ
![Page 107: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/107.jpg)
uma biblioteca construída para o estilo de programação funcional que facilita a utilização de pipelines e dados imutáveis
![Page 108: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/108.jpg)
possui foco no estilo puramente funcional
![Page 109: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/109.jpg)
todas as funções do Ramda são auto-curried
![Page 110: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/110.jpg)
os argumentos das funções do Ramda são organizados de forma a facilitar a utilização de currying
![Page 111: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/111.jpg)
Caso de Uso 1 somar os preços dos produtos de um carrinho de compras
![Page 112: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/112.jpg)
!// shopping cart const cart = [ {id: 1, product: 'iPhone', price: 499}, {id: 2, product: 'Kindle', price: 179}, {id: 3, product: 'Macbook Pro', price: 1199}, ];
!// get prices from shopping cart and sum them!// using intermediate values const cartPrices = R.map(item !=> item.price, cart); const cartSum = R.sum(cartPrices);
console.log(cartSum); !// 1877 realiza o mapeamento da lista de produtos (objetos) para uma lista de preços (números)
faz a somatória da lista de números e retorna o total
Passo 1
![Page 113: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/113.jpg)
!// shopping cart const cart = [ {id: 1, product: 'iPhone', price: 499}, {id: 2, product: 'Kindle', price: 179}, {id: 3, product: 'Macbook Pro', price: 1199}, ];
!// get prices from shopping cart and sum them!// using function composition const totalCart = R.compose( R.sum, R.map(item !=> item.price), );
console.log(totalCart(cart)); !// 1877
cria uma nova função a partir da composição de funções e elimina valores intermediários
aplicação parcial da função map
a composição é feita da direita para a esquerda
Passo 2
![Page 114: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/114.jpg)
!// shopping cart const cart = [ {id: 1, product: 'iPhone', price: 499}, {id: 2, product: 'Kindle', price: 179}, {id: 3, product: 'Macbook Pro', price: 1199}, ];
!// get prices from shopping cart and sum them !// using function composition with pipe const totalCart = R.pipe( R.map(item !=> item.price), R.sum, );
console.log(totalCart(cart)); !// 1877
o pipe de funções é feito da esquerda para a direita e facilita a leitura do código
Passo 3
![Page 115: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/115.jpg)
Caso de Uso 2 limpar dados vindo de um formulário e realizar um cálculo
![Page 116: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/116.jpg)
!// cleaning data from an input const price = '100';
const discount = (perc, value) !=> perc * value;
let priceInt = parseInt(price); let priceDiscount = discount(0.2, priceInt);
console.log(priceDiscount); !// 20
Passo 1
![Page 117: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/117.jpg)
!// cleaning data from an input const price = '100';
const discount = (perc, value) !=> perc * value;
!// using partial application const discount20 = R.partial(discount, [0.2]);
let priceInt = parseInt(price); let priceDiscount = discount20(priceInt);
console.log(priceDiscount); !// 20
cria uma nova função a partir da aplicação parcial de uma existente
Passo 2
![Page 118: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/118.jpg)
!// cleaning data from an input const price = '100';
const discount = (perc, value) !=> perc * value;
!// using function composition const priceDiscount = R.pipe( parseInt, R.partial(discount, [0.2]), );
console.log(priceDiscount(price)); !// 20
cria uma nova função a partir da composição de funções utilizando a função pipe e elimina valores intermediários
Passo 3
![Page 119: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/119.jpg)
!// cleaning data from an input const price = 'lambda!';
const discount = (perc, value) !=> perc * value;
!// using function composition const priceDiscount = R.pipe( parseInt, R.partial(discount, [0.2]), );
console.log(priceDiscount(price)); !// nullerro ao receber um valor não numérico
Passo 4
![Page 120: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/120.jpg)
!// cleaning data from an input const price = 'lambda!';
const discount = (perc, value) !=> perc * value;
!// using function composition const priceDiscount = R.pipe( parseInt, R.defaultTo(0), R.partial(discount, [0.2]), );
console.log(priceDiscount(price)); !// 0
retorna o valor padrão para o caso de um valor não truthy
Passo 5
![Page 121: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/121.jpg)
existem inúmeros conceitos relacionados a programação funcional como functors, monads, lazy evaluation, tail call optimization…
![Page 122: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/122.jpg)
Conclusão
![Page 123: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/123.jpg)
os princípios de design ajudam a projetar códigos melhores
![Page 124: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/124.jpg)
um código mau projetado é um código difícil de mudar
![Page 125: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/125.jpg)
prefira módulos com alta coesão e baixo acoplamento
![Page 126: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/126.jpg)
a programação funcional não é sobre não ter estado…
![Page 127: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/127.jpg)
…e sim sobre eliminar estado e efeito colateral sempre que possível e controlar efeitos colaterais quando necessário
![Page 128: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/128.jpg)
foque na transformação do estado e evite efeitos colaterais
![Page 129: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/129.jpg)
conhecer bem os paradigmas de programação te permite escolher a melhor ferramenta para cada problema
![Page 130: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/130.jpg)
vá em frente e divirta-se!
![Page 131: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/131.jpg)
Referências
![Page 132: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/132.jpg)
bit.ly/referencias-palestra-paradigmas
![Page 133: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/133.jpg)
Avalie!
![Page 134: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/134.jpg)
bit.ly/avalie-palestra-paradigmas
![Page 135: paradigmas de programação - Amazon S3 · programação funcional que facilita a utilização de pipelines e dados imutáveis. possui foco no estilo puramente funcional. todas as](https://reader033.vdocuments.pub/reader033/viewer/2022052800/5f0ff4407e708231d446b685/html5/thumbnails/135.jpg)
@marcelgsantosspeakerdeck.com/marcelgsantos
Obrigado.Perguntas?