Files
freeCodeCamp/curriculum/challenges/portuguese/02-javascript-algorithms-and-data-structures/functional-programming/avoid-mutations-and-side-effects-using-functional-programming.md
2021-10-27 21:47:35 +05:30

2.4 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d7b8e367417b2b2512b5e Evitar mutações e efeitos colaterais usando programação funcional 1 301228 avoid-mutations-and-side-effects-using-functional-programming

--description--

Caso você ainda não tenha descoberto, o problema do desafio anterior é com a chamada a splice na função tabClose(). Infelizmente, splice modifica o array original no qual opera e, por isso, a segunda chamada usou o array alterado, nos dando resultados inesperados.

Este é apenas um pequeno exemplo - você chama uma função e passa uma variável, array ou objeto a ela; a função modifica a variável ou alguma coisa no objeto.

Um dos principais princípios da programação funcional é que não devemos alterar coisas. Alterações levam a bugs. É mais fácil prever bugs quando se sabe que as funções não mudam nada, nem mesmo os argumentos e as variáveis globais.

No exemplo anterior não havia nenhuma operação complicada, mas o método splice modificou o array original e o resultado foi um bug.

Lembre-se de que, em programação funcional, modificar ou alterar coisas é chamado de mutação e a consequência é chamada de efeito colateral. Idealmente, uma função deveria ser uma função pura, que é uma função que não causa efeitos colaterais.

Vamos tentar dominar esta disciplina e não alterar nenhuma variável ou objeto em nosso código.

--instructions--

Complete o código da função incrementer para que ela retorne o valor da variável global fixedValue acrescida em um.

--hints--

A função incrementer não deve alterar o valor de fixedValue (que é 4).

incrementer();
assert(fixedValue === 4);

A função incrementer deve retornar um valor que é maior que o valor fixedValue.

const __newValue = incrementer();
assert(__newValue === 5);

A função incrementer deve retornar um valor baseado no valor da variável global fixedValue.

(function () {
  fixedValue = 10;
  const newValue = incrementer();
  assert(fixedValue === 10 && newValue === 11);
  fixedValue = 4;
})();

--seed--

--seed-contents--

// The global variable
let fixedValue = 4;

function incrementer() {
  // Only change code below this line


  // Only change code above this line
}

--solutions--

let fixedValue = 4

function incrementer() {
  return fixedValue + 1
}