Advertisement
Guest User

Funções Puras

a guest
Jan 21st, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * Regra de Ouro, tente sempre que possível utilizar Funções Puras.
  3.  *
  4.  * "Funções Puras são funções que dado um parâmetro input sempre vão retornar o
  5.  * mesmo output sem causar efeitos colaterais side effects."
  6.  */
  7.  
  8. // Exemplo de função impura:
  9. {
  10.   const handleApiImpura = (apiArray, id) => {
  11.     for (let objAPI of apiArray) {
  12.       objAPI.url = objAPI.url + id
  13.     }
  14.  
  15.     return apiArray
  16.   }
  17.  
  18.   const id = '1'
  19.   const apiArray = [
  20.     {
  21.       url: 'http://api.co/usuario/',
  22.       method: 'GET'
  23.     },
  24.     {
  25.       url: 'http://api.co/produto/',
  26.       method: 'POST'
  27.     }
  28.   ]
  29.  
  30.   const newArray = handleApiImpura(apiArray, id)
  31.  
  32.   console.log(newArray[0].url) // 'http://api.co/usuario/1'
  33.   console.log(newArray[1].url) // 'http://api.co/prosuto/1'
  34.  
  35.   console.log(apiArray[0].url) // 'http://api.co/usuario/1'
  36.   console.log(apiArray[1].url) // 'http://api.co/produto/1'
  37.  
  38.   /*
  39.    * No exemplo acima a função é impura pois modifica o input (apiArray) causando um efeito
  40.    * colateral (side effects).
  41.    */
  42. }
  43.  
  44. // Exemplo de função pura:
  45. {
  46.   const handleApiPura = (apiArray, id) => {
  47.     return apiArray.map(objAPI => {
  48.       const newObj = { ...objAPI }
  49.  
  50.       newObj.url = newObj.url + id
  51.  
  52.       return newObj
  53.     })
  54.   }
  55.  
  56.   const id = '1'
  57.   const apiArray = [
  58.     {
  59.       url: 'http://api.co/usuario/',
  60.       method: 'GET'
  61.     },
  62.     {
  63.       url: 'http://api.co/produto/',
  64.       method: 'POST'
  65.     }
  66.   ]
  67.  
  68.   const newArray = handleApiPura(apiArray, id)
  69.  
  70.   console.log(newArray[0].url) // 'http://api.co/usuario/1'
  71.   console.log(newArray[1].url) // 'http://api.co/prosuto/1'
  72.  
  73.   console.log(apiArray[0].url) // 'http://api.co/usuario/'
  74.   console.log(apiArray[1].url) // 'http://api.co/produto/'
  75.  
  76.   /*
  77.    * No exemplo acima a função é pura pois se enviarmos o mesmo input (apiArray) várias vezes,
  78.    * teremos o mesmo output (newArray) e não iremos causar efeito colateral (side effects) em
  79.    * apiArray.
  80.    *
  81.    * Dentro da função é handleApiPura utilizado Spread operator para clonar o objeto que está dentro
  82.    * do Array (apiArray), isso é necessário pois o objeto dentro do Array é passado como referência,
  83.    * ou seja, o conteudo do objeto em si não é enviado ao parâmetro da função e sim seu endereço na
  84.    * memória. Como você tem acesso ao objeto verdadeiro e não à uma cópia, caso o altere dentro da,
  85.    * função ele será alterado fora dela também. Com o Spread operator { ... } conseguimos clonar o
  86.    * objeto, nos dando a segurança necessária para manipulá-lo dentro do escopo da função, sem que
  87.    * ocorra side effects.
  88.    */
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement