SlideShare a Scribd company logo
JAVASCRIPT
FUNCIONAL
THE DEVELOPERS CONFERENCE
λ04/05/2017
HENRIQUE
RECIDIVE
DESENVOLVEDOR FULL-STACK
λTALLER.NET.BR
BLOG.TALLER.NET.BR
História do JavaScript
1995 - Primeira release (Netscape Navigator 2)
1996 - Adoção pela Microsoft (Internet Explorer 3)
1997 - Padronização (ECMAScript)
1998 - ECMAScript 2
1999 - ECMAScript 3
História do JavaScript (continuação)
2003 - ECMAScript 4 é "abortado"
2009 - ECMAScript 5
2015 - ECMAScript 2015 (ES6)
2016 - ECMAScript 2016 (ES7)
2017 - ECMAScript 2017 (ES8)
PLATAFORMAS
PLATAFORMAS
Javascript Funcional - TDC Florianópolis 2017
PLATAFORMAS
Browsers
Javascript Funcional - TDC Florianópolis 2017
PLATAFORMAS
Browsers
Servidores
Javascript Funcional - TDC Florianópolis 2017
PLATAFORMAS
Browsers
Servidores
Microcontroladores
PLATAFORMAS
Browsers
Servidores
Microcontroladores
Mobile
ES6
ES6
!// Arrow functions.
function soma(a, b) {
return a + b
}
ES6
!// Arrow functions.
function soma(a, b) {
return a + b
}
ES6
!// Arrow functions.
function soma(a, b) {
return a + b
}
const soma = (a, b) !=> a + b
ES6
!// Spread.
const object = {
foo: 'bar'
}
const anotherObject = {
!!...object,
baz: ‘qux'
}
ES6
!// Spread.
const object = {
foo: 'bar'
}
const anotherObject = {
!!...object,
baz: ‘qux'
}
Javascript Funcional - TDC Florianópolis 2017
{
"presets": [
["env", {
"targets": {
"chrome": 52,
"browsers": ["last 2 versions"]
}
}]
]
}
{
"presets": [
["env", {
"targets": {
"chrome": 52,
"browsers": ["last 2 versions"]
}
}]
]
}
TRANSPARÊNCIA
REFERENCIAL
var content = 'Lorem Ipsum';
function setContent() {
document.getElementById('paragraph')
.innerHTML = content;
}
var content = 'Lorem Ipsum';
function setContent() {
document.getElementById('paragraph')
.innerHTML = content;
}
var content = 'Lorem Ipsum';
function setContent() {
document.getElementById('paragraph')
.innerHTML = content;
}
Não transparente
var content = 'Lorem Ipsum';
function setContent() {
document.getElementById('paragraph')
.innerHTML = content;
}
Não transparente
PUREZA
PUREZA
SIDE EFFECTS
var content = 'Lorem Ipsum';
function setContent() {
document.getElementById('paragraph')
.innerHTML = content;
}
setContent()
function setContent(element, content) {
element.innerHTML = content
}
const content = 'Lorem Ipsum'
const element = document
.getElementById('paragraph')
setContent(element, content)
function setContent(element, content) {
element.innerHTML = content
}
const content = 'Lorem Ipsum'
const element = document
.getElementById('paragraph')
setContent(element, content)
IMUTABILIDADE
let x = 1
let y = x
y = 2
!// x !== 1 (imutável)
let a = {}
let b = a
b.foo = true
!// a !== { foo: true } (mutável)
let c = { bar: ‘bar' }
!// Torna o objeto imutável.
Object.freeze(c)
c.baz = 'baz'
!// c = {bar: 'bar'} (imutável)
!// Cria um novo objeto.
let d = Object.assign({}, c, {
baz: 'baz'
})
!// Torna o objeto imutável.
Object.freeze(d)
HTTPS://GITHUB.COM/SWANNODETTE/MORI
HTTPS://GITHUB.COM/FACEBOOK/IMMUTABLE-JS
import { Map } from ‘immutable'
const map1 = Map({ a: 1, b: 2, c: 3 })
const map2 = map1.set('b', 50)
map1.get('b') !// 2
map2.get('b') !// 50
RECURSÃO
const recursiveSum = collection !=>
collection.reduce((prev, curr) !=>
(Array.isArray(curr)
? prev + recursiveSum(curr)
: prev + curr), 0)
const collection = [1, [2, [3, 4]], 5]
recursiveSum(collection)
!// 15
const fibonacci = n !=> (n !<= 1
? n
: fibonacci(n - 1) + fibonacci(n - 2))
fibonacci(10)
!// 55
FERRAMENTAS
FERRAMENTAS DE PRIMEIRA GERAÇÃO
FERRAMENTAS DE SEGUNDA GERAÇÃO
import { curry } from 'ramda'
const sum = (a, b) !=> a + b
const curriedSum = curry(sum)
const sumTen = curriedSum(10)
sumTen(5)
!// 15
import { curry, !__ } from 'ramda'
const divide = (a, b) !=> a / b
const curriedDivide = curry(divide)
const divideByTen = curriedDivide(!__, 10)
divideByTen(1000)
!// 100
Javascript Funcional - TDC Florianópolis 2017
FANTASY LAND
HTTPS://GITHUB.COM/FANTASYLAND/FANTASY-LAND
HTTPS://GITHUB.COM/CWMYERS/MONET.JS
HTTPS://GITHUB.COM/RAMDA/RAMDA-FANTASY
PORQUE USAR?
Desacoplamento
Testes automatizados
Codebase enxuta
Aplicações eficientes
THE END

More Related Content

PDF
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
PDF
Event loops in java script 01 - stack
KEY
Dart != JavaScript
PPT
Dart und JavaScript
PPTX
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
PPTX
Discovery kanban
PDF
Taller Negócios Digitais
PDF
De um sistema legado para micro serviços com GraphQL
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
Event loops in java script 01 - stack
Dart != JavaScript
Dart und JavaScript
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Discovery kanban
Taller Negócios Digitais
De um sistema legado para micro serviços com GraphQL

More from Taller Negócio Digitais (20)

PDF
Next.js with drupal, the good parts
PPTX
Gestão Ágil com Fluxo Unificado
PDF
Alinhando Discovery com Delivery usando Upstream Kanban
PDF
Lições Aprendidas com Fluxo Unificado
PDF
Como a liderança descentralizada tornou a Taller mais efetiva
PDF
Métricas no Fluxo Unificado
PDF
Práticas e ferramentas de feedback: potencializando a cultura da confiança
PDF
Como preparar seu time para receber feedback - Scrum Gathering Rio 2017
PDF
Vacinando mais de 200 mil pessoas com ReactJS e GraphQL
PDF
Taller – Treinamentos e consultorias
PDF
Taller - Ateliê de desenvolvimento de software
PDF
Introdução ao Fluxo Unificado - TDC Florianópolis 2017
PDF
11 maneiras de compartilhar conhecimento - TDC Florianópolis 2017
PDF
Kanban no Fluxo Unificado de Portfolio de Projetos - Agile Brazil 2016
PPTX
Programação Eficaz - Agile Trends Floripa 2016
PDF
Trabalhando a cultura do feedback. Por onde começar?
PPTX
Superando o GitFlow - DrupalCamp Campinas 2016
PPTX
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...
PPTX
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
PPTX
Arquitetura de referência Drupal 7 e 8. Da Natura e Taller para a comunidade ...
Next.js with drupal, the good parts
Gestão Ágil com Fluxo Unificado
Alinhando Discovery com Delivery usando Upstream Kanban
Lições Aprendidas com Fluxo Unificado
Como a liderança descentralizada tornou a Taller mais efetiva
Métricas no Fluxo Unificado
Práticas e ferramentas de feedback: potencializando a cultura da confiança
Como preparar seu time para receber feedback - Scrum Gathering Rio 2017
Vacinando mais de 200 mil pessoas com ReactJS e GraphQL
Taller – Treinamentos e consultorias
Taller - Ateliê de desenvolvimento de software
Introdução ao Fluxo Unificado - TDC Florianópolis 2017
11 maneiras de compartilhar conhecimento - TDC Florianópolis 2017
Kanban no Fluxo Unificado de Portfolio de Projetos - Agile Brazil 2016
Programação Eficaz - Agile Trends Floripa 2016
Trabalhando a cultura do feedback. Por onde começar?
Superando o GitFlow - DrupalCamp Campinas 2016
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Arquitetura de referência Drupal 7 e 8. Da Natura e Taller para a comunidade ...
Ad

Javascript Funcional - TDC Florianópolis 2017