Programação
Funcional
em JavaScript
Parte 1
de 3
Motivações
UIs são assíncronas
Efeitos colaterais
Testes
Poder computacional
JavaScript
Lisp
Smalltalk
Scheme
Self
JavaScript
Functional
O.O.
Contato via exemplo
1. Currying
2. Composition
1. Currying
Curried Function:
função que retorna uma nova função
até que tenha recebido todos seus argumentos.
var add = function (x) {
return function (y) {
return x + y
}
}
var add3 = add(3) // function(y){}
add3(4) // 7Currying
add3(5) // 8add(1)(1) // 2... ?

var add = _.curry(function (x, y) {
return x + y
})
var add3 = add(3) // function(y){}
add3(4) // 7Currying
add(1, 1) // 2var _ = require('lodash')var _ = require('lodash')
var resto = _.curry(
function (divisor, dividendo) {
return dividendo % divisor
}
)
resto(3, 9) // 0
var isOdd = resto(2)
isOdd(4) // 0
isOdd(9) // 1Currying
var filter = _.curry(
function (fn, list) {
return list.filter(fn)
}
)
filter(isOdd, [1,2,3,4,5]) // [1,3,5]Currying
var somenteImpares = filter(isOdd)
somenteImpares([1,2,3,4,5]) // [1,3,5]você cria novas funções ao passar funções como argumento.
wow
2. Composition
Composed Functions:
acontece quando duas ou mais funções são combinadas para gerar uma nova função.
var _ = require("lodash")
var last = function (list) {
var list_reversed = _.reverse(list)
return _.first(list_reversed)
}Composition
var last = _.compose(_.first, _.reverse)last([1,2,3,4,5]) // 5argumentos, dados
argument free
evaluation order
declarativo →
propenso ao paralelismo
var wordCount = function(str) {
var words = split(' ', str)
return length(words)
}
Composition
& Currying
var wordCount = _.compose(
length,
split(' ')
)
wordCount("Tá chovendo aí?") // 3Referências
Hey Underscore, You're Doing It Wrong!
Obrigado
FP em JS
By Fellipe Cicconi
FP em JS
Brevíssima introdução sobre como abordar conceitos básicos de programação funcional em JavaScript.
- 178