Supponiamo che abbiamo una normale funzione pura come
function add(a, b) {
return a + b
}
E poi lo alteriamo in modo tale che abbia un effetto collaterale
function add(a, b) {
writeToDatabase(Math.random())
return a + b;
}
Per quanto ne so, non è considerata una funzione pura perché sento spesso che le persone chiamano funzioni pure "funzioni senza effetti collaterali". Tuttavia, si comporta come una funzione pura per il fatto che restituirà lo stesso output per gli stessi input.
Esiste un nome diverso per questo tipo di funzione, è senza nome o è ancora in realtà puro e mi sbaglio sulla definizione di purezza?
writeToDatabase
fallisce, potrebbe innescare un'eccezione, facendo sì che la tua seconda add
funzione produca un'eccezione a volte anche se chiamata con gli stessi argomenti che prima non avevano problemi ... il più delle volte avere effetti collaterali introduce questo tipo di condizioni legate all'errore che si rompono "purezza input-output".
F(x)
è definito per il ritorno true
se si chiama con lo stesso argomento come chiamata precedente. Chiaramente con la sequenza {1,2,2} => {undefined, false, true}
questo è deterministico, ma dà risultati diversi per F(2)
.