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) // 7

Currying

add3(5) // 8
add(1)(1) // 2... ?
var add = _.curry(function (x, y) {
    return x + y
})

var add3 = add(3) // function(y){}

add3(4) // 7

Currying

add(1, 1) // 2
var _ = 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) // 1

Currying

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]) // 5

argumentos, 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í?") // 3

Referê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.

  • 179