Functional programming (often abbreviated FP) is the process of building software...
const suma = (a, b) => {
return a + b
}
console.log(sum(1, 2))
const suma = (a, b) => {
return a + b
}
const calculo = suma
const resultado = calculo(1, 2)
console.log(resultado) // 3
// Datos
const datos = [
{
id: 0,
name: 'Gustavo',
job: 'backend'
},
{
id: 1,
name: 'Juan',
job: 'designer'
},
{
id: 2,
name: 'Raúl',
job: 'frontend'
}
]
// Opcion #1 - Guardar en un array solo los usuarios de tipo backend
let backend = []
for (i = 0; i < datos.length; i++) {
if (datos[i].job === 'backend') {
backend.push(datos[i])
}
}
console.log({backend}) // [{ id: 0, name: 'Gustavo', job: 'backend'...
/* Opcion #2 - Guardar en un array solo los usuarios de tipo backend
de forma funcional */
const backend2 = datos.filter(function(user) {
return user.job === 'backend'
})
console.log({backend2}) // [{ id: 0, name: 'Gustavo', job: 'backend'...
// Opcion #3 - Ó en una sola linea
const backend3 = datos.filter(user => user.job === 'backend')
console.log({backend3}) // [{ id: 0, name: 'Gustavo', job: 'backend'...
// Opcion #4 - De forma compuesta
const filtro = user => user.job === 'backend'
const backend4 = datos.filter(filtro)
console.log({backend4}) // [{ id: 0, name: 'Gustavo', job: 'backend'...
// Datos
const productos = [
{
name: 'Palta',
price: 3800
},
{
name: 'Lechuga',
price: 400
},
{
name: 'Limon',
price: 800
}
]
const resultado = productos
.map(item => item.price)
.reduce((suma, producto) => suma + producto)
console.log({resultado}) // 5000
Extra y crear un nuevo arreglo
Extrae todos los resultados que encuentra
Extrae el primer valor que encuentra
Aplica un acumulador a cada elemento de izquierda a derecha, reduciendo en un solo valor
https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Array/prototype
const promesa = (value) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (value > 0) {
resolve(true)
} else {
reject(false)
}
}, 200)
})
}
promesa(0).then(value => {
console.log(value)
}).catch(value => {
console.log(value)
})
const promesa = (value) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (value > 0) {
resolve(true)
} else {
reject(false)
}
}, 600)
})
}
const respuesta = async value => {
const res = await promesa(value)
console.log(res)
}
console.log(respuesta(1))
Aprovechar los prototipos de ES6 para exprimir el código https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Array/prototype
Siempre documentar http://usejsdoc.org y testear
import React, { Component } from 'react'
import PropTypes from 'prop-types'
import { View } from 'react-native'
import styled from 'styled-components'
import Icon from 'react-native-vector-icons/Ionicons'
import { Colors, Metrics } from '../themes'
/** @component */
class Checkbox extends Component {
constructor (props) {
super(props)
}
static propTypes = {
isActive: PropTypes.bool
}
render () {
const { isActive } = this.props
const Wrapper = styled(View)`
border-radius: ${Metrics.borderRadius.base};
border: 2px solid ${Colors.grayLight};
background-color: ${props => props.isActive ? Colors.grayLight : Colors.white};
width: 30px;
height: 30px;
align-items: center;
`
return (
<Wrapper {...this.props}>
{isActive && (
<Icon
name="md-checkmark"
size={22}
color={Colors.white}
style={{marginTop: 2}}
/>
)}
</Wrapper>
)
}
}
export default Checkbox
import React, { Component } from 'react'
import PropTypes from 'prop-types'
import { View } from 'react-native'
import styled from 'styled-components'
import Icon from './Icon'
import { Colors, Metrics } from '../themes'
/** @component */
const Checkbox = props => {
const { isActive } = props
const Wrapper = styled(View)`
border-radius: ${Metrics.borderRadius.base};
border: 2px solid ${Colors.grayLight};
background-color: ${props => props.isActive ? Colors.grayLight : Colors.white};
width: 30px;
height: 30px;
align-items: center;
`
return (
<Wrapper {...props}>
{isActive && (
<Icon
name="md-checkmark"
size={22}
color={Colors.white}
style={{marginTop: 2}}
/>
)}
</Wrapper>
)
}
Checkbox.PropTypes = {
/** Name */
isActive: PropTypes.bool
}
Checkbox.defaultProps = {
isActive: false
}
export default Checkbox