"Programação funcional é um paradigma de programação que trata a computação como uma avaliação de funções matemáticas e que evita estados ou dados mutáveis. Ela enfatiza a aplicação de funções, em contraste da programação imperativa, que enfatiza mudanças no estado do programa."
É uma especificação para interoperabilidade entre bibliotecas utilizando programação funcional baseada em teoria das categorias
JavaScript é uma linguagem multiparadigma, ou seja, aceita vários paradigmas... ... e Ramda é uma biblioteca baseada no paradigma funcional para JavaScript.
Ramda é, basicamente, um conjunto de funções enfatizadas no paradigma funcional, que não tem efeitos colaterais nem mutabilidade.
yarn add ramda
- Funções
- Listas
- Lógicos
- Números
- Objetos
- Strings
Exemplos:
Funções complementares
T
eF
add
esubtract
all
enone
append
eprepend
apply
eunapply
ascend
edescend
assoc
edissoc
compose
epipe
curry
euncurry
dec
einc
either
eboth
filter
ereject
fromPairs
etoPairs
gt
elt
(e derivações)head
elast
init
etail
join
esplit
max
emin
(e derivações)mergeLeft
emergeRight
pick
eomit
take
edrop
then
eotherwise
(para Promises)toLower
etoUpper
when
eunless
Podemos utilizar Ramda ao:
- Atualizar o estado da aplicação:
handleToggleChecked = () => {
this.setState(evolve({ checked: not }))
}
- Filtrar os resultados de uma lista:
getBrowseItems = options => {
const { searchText = '' } = this.props
return options
.filter(
pipe(
values,
map(toLower),
any(contains(toLower(searchText)))
)
)
}
- Ordenar uma lista:
render = () => {
const { options } = this.props
const items = this.getBrowseItems(options)
const sortByName = sortBy(prop('name'))
return sortByName(items).map(item =>
// Items here
)
}
- Validar um formulário:
isFormValid = data => {
const isFilled = complement(isEmpty)
return where({
email: isFilled,
password: isFilled
})(data)
}
- Controlar o que será renderizado:
render = () => {
return cond([
[equals(SUCCESS_SCREEN), this.renderSuccesScreen],
[equals(ERROR_SCREEN), this.renderErrorScreen],
[T, this.renderForm],
])(this.state.screen)
}
... praticamente e qualquer situação de manipulação de dados, seja em Classes, SFCs ou Hooks.
É isso!
Marcelo Camargo e William Rozin Gaspar
2019