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
PLATAFORMAS
Browsers
PLATAFORMAS
Browsers
Servidores
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'
}
{
"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 } = ‘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(a)
sumTen(5)
!// 15
import { curry, !__ } from 'ramda'
const divide = (a, b) !=> a / b
const curriedDivide = curry(divide)
const divideByTen = curriedDivide(!__, 10)
divideByTen(1000)
!// 100
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

More from tdc-globalcode

TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
tdc-globalcode
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
tdc-globalcode
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devices
tdc-globalcode
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
tdc-globalcode
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
tdc-globalcode
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocus
tdc-globalcode
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
tdc-globalcode
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
tdc-globalcode
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
tdc-globalcode
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
tdc-globalcode
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
tdc-globalcode
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
tdc-globalcode
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
tdc-globalcode
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
tdc-globalcode
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#
tdc-globalcode
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
tdc-globalcode
 
TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1
TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1
TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1
tdc-globalcode
 
TDC2018SP | Trilha BigData - Big Data Governance - Como estabelecer uma Gover...
TDC2018SP | Trilha BigData - Big Data Governance - Como estabelecer uma Gover...TDC2018SP | Trilha BigData - Big Data Governance - Como estabelecer uma Gover...
TDC2018SP | Trilha BigData - Big Data Governance - Como estabelecer uma Gover...
tdc-globalcode
 
TDC2018SP | Trilha BigData - Mais Falados - Usando a Interacao Social para a ...
TDC2018SP | Trilha BigData - Mais Falados - Usando a Interacao Social para a ...TDC2018SP | Trilha BigData - Mais Falados - Usando a Interacao Social para a ...
TDC2018SP | Trilha BigData - Mais Falados - Usando a Interacao Social para a ...
tdc-globalcode
 
TDC2018SP | Trilha BigData - Processando dados de acidentes de transito em st...
TDC2018SP | Trilha BigData - Processando dados de acidentes de transito em st...TDC2018SP | Trilha BigData - Processando dados de acidentes de transito em st...
TDC2018SP | Trilha BigData - Processando dados de acidentes de transito em st...
tdc-globalcode
 

More from tdc-globalcode (20)

TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devices
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocus
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
 
TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1
TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1
TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1
 
TDC2018SP | Trilha BigData - Big Data Governance - Como estabelecer uma Gover...
TDC2018SP | Trilha BigData - Big Data Governance - Como estabelecer uma Gover...TDC2018SP | Trilha BigData - Big Data Governance - Como estabelecer uma Gover...
TDC2018SP | Trilha BigData - Big Data Governance - Como estabelecer uma Gover...
 
TDC2018SP | Trilha BigData - Mais Falados - Usando a Interacao Social para a ...
TDC2018SP | Trilha BigData - Mais Falados - Usando a Interacao Social para a ...TDC2018SP | Trilha BigData - Mais Falados - Usando a Interacao Social para a ...
TDC2018SP | Trilha BigData - Mais Falados - Usando a Interacao Social para a ...
 
TDC2018SP | Trilha BigData - Processando dados de acidentes de transito em st...
TDC2018SP | Trilha BigData - Processando dados de acidentes de transito em st...TDC2018SP | Trilha BigData - Processando dados de acidentes de transito em st...
TDC2018SP | Trilha BigData - Processando dados de acidentes de transito em st...
 

TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team at JavaScript