freeCodeCamp/curriculum/challenges/italian/02-javascript-algorithms-an.../functional-programming/avoid-mutations-and-side-ef...

2.5 KiB

id title challengeType forumTopicId dashedName
587d7b8e367417b2b2512b5e Evitare mutazioni ed effetti collaterali utilizzando la programmazione funzionale 1 301228 avoid-mutations-and-side-effects-using-functional-programming

--description--

Come avrai già capito, il problema nella sfida precedente è stato con la chiamata a splice nella funzione tabClose(). Sfortunatamente, splice cambia l'array su cui viene chiamato, così la seconda chiamata ad esso usava un array modificato, dando risultati inaspettati.

Questo è un piccolo esempio di un modello molto più grande - si chiama una funzione su una variabile, un array, o un oggetto, e la funzione cambia la variabile o qualcosa nell'oggetto.

Uno dei principi fondamentali della programmazione funzionale è di non cambiare le cose. Le modifiche portano a bug. È più facile prevenire i bug sapendo che le tue funzioni non cambiano nulla, inclusi gli argomenti delle funzioni o qualsiasi variabile globale.

L'esempio precedente non aveva operazioni complicate ma il metodo splice ha cambiato l'array originale e ha provocato un bug.

Ricorda che nella programmazione funzionale, la modifica o alterazione delle cose è chiamata mutazione, e il risultato è chiamato effetto collaterale. Una funzione, idealmente, dovrebbe essere una funzione pura, cioè non dovrebbe provocare effetti collaterali.

Cerchiamo di padroneggiare questa disciplina e non modificare alcuna variabile o oggetto nel nostro codice.

--instructions--

Compila il codice per la funzione incrementer in modo che restituisca il valore della variabile globale fixedValue aumentata di uno.

--hints--

La tua funzione incrementer non dovrebbe cambiare il valore di fixedValue (che è 4).

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

La tua funzione incrementer dovrebbe restituire un valore di una unità più grande del valore fixedValue.

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

La tua funzione incrementer dovrebbe restituire un valore basato sul valore della variabile globale fixedValue.

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

--seed--

--seed-contents--

// The global variable
var fixedValue = 4;

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


  // Only change code above this line
}

--solutions--

var fixedValue = 4

function incrementer() {
  return fixedValue + 1
}