Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Regra de Ouro, tente sempre que possível utilizar Funções Puras.
- *
- * "Funções Puras são funções que dado um parâmetro input sempre vão retornar o
- * mesmo output sem causar efeitos colaterais side effects."
- */
- // Exemplo de função impura:
- {
- const handleApiImpura = (apiArray, id) => {
- for (let objAPI of apiArray) {
- objAPI.url = objAPI.url + id
- }
- return apiArray
- }
- const id = '1'
- const apiArray = [
- {
- url: 'http://api.co/usuario/',
- method: 'GET'
- },
- {
- url: 'http://api.co/produto/',
- method: 'POST'
- }
- ]
- const newArray = handleApiImpura(apiArray, id)
- console.log(newArray[0].url) // 'http://api.co/usuario/1'
- console.log(newArray[1].url) // 'http://api.co/prosuto/1'
- console.log(apiArray[0].url) // 'http://api.co/usuario/1'
- console.log(apiArray[1].url) // 'http://api.co/produto/1'
- /*
- * No exemplo acima a função é impura pois modifica o input (apiArray) causando um efeito
- * colateral (side effects).
- */
- }
- // Exemplo de função pura:
- {
- const handleApiPura = (apiArray, id) => {
- return apiArray.map(objAPI => {
- const newObj = { ...objAPI }
- newObj.url = newObj.url + id
- return newObj
- })
- }
- const id = '1'
- const apiArray = [
- {
- url: 'http://api.co/usuario/',
- method: 'GET'
- },
- {
- url: 'http://api.co/produto/',
- method: 'POST'
- }
- ]
- const newArray = handleApiPura(apiArray, id)
- console.log(newArray[0].url) // 'http://api.co/usuario/1'
- console.log(newArray[1].url) // 'http://api.co/prosuto/1'
- console.log(apiArray[0].url) // 'http://api.co/usuario/'
- console.log(apiArray[1].url) // 'http://api.co/produto/'
- /*
- * No exemplo acima a função é pura pois se enviarmos o mesmo input (apiArray) várias vezes,
- * teremos o mesmo output (newArray) e não iremos causar efeito colateral (side effects) em
- * apiArray.
- *
- * Dentro da função é handleApiPura utilizado Spread operator para clonar o objeto que está dentro
- * do Array (apiArray), isso é necessário pois o objeto dentro do Array é passado como referência,
- * ou seja, o conteudo do objeto em si não é enviado ao parâmetro da função e sim seu endereço na
- * memória. Como você tem acesso ao objeto verdadeiro e não à uma cópia, caso o altere dentro da,
- * função ele será alterado fora dela também. Com o Spread operator { ... } conseguimos clonar o
- * objeto, nos dando a segurança necessária para manipulá-lo dentro do escopo da função, sem que
- * ocorra side effects.
- */
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement