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
}