Scrivo codice JavaScript e cerco di utilizzare la sua natura linguaggio funzionale.Devo sempre dare un valore di ritorno alla mia funzione?
In altri linguaggi funzionali (o anche in Ruby), se non imposto esplicitamente il valore di ritorno di una funzione, restituirà il valore dell'ultima espressione valutata. JavaScript non segue questo schema. (Per essere precisi, JavaScript restituisce sempre anche un valore. Se non è stato impostato nulla, quindi undefined
.)
La mia domanda è la seguente: Ho una funzione che non ha bisogno di (e non) restituire un valore . Ha senso in un contesto di programmazione funzionale avere una funzione senza un valore di ritorno esplicito? Oppure ha fallito da qualche parte se mi sono trovato in questo caso?
Ad esempio, ho la seguente funzione. Controlla periodicamente se l'hash della posizione è stato modificato e, in tal caso, chiama la funzione data.
LIB_hashManager = function(f, context) {
var prev = '';
var pollHash = function() {
if (prev !== window.location.hash) {
prev = window.location.hash;
f.apply(context);
}
};
window.setInterval(pollHash, 100);
};
Devo tornare qui?
Aggiornamento
Nel frattempo mi è venuto in mente, che se in qualsiasi momento in futuro avrò bisogno di estendere la conoscenza di LIB_hashManager
, seguendo il modello di costruzione funzionale, posso semplicemente aggiungere metodi a un oggetto e LIB_hashManager
restituirà quell'oggetto prodotto.
LIB_hashManager = function(f, context) {
// inside logic
// ...
};
E più tardi io possa scrivere:
LIB_hashManager = function(f, context) {
// inside logic
// ...
// return public methods
return {
// ...
}
};
Quindi non ha senso quindi per restituire un oggetto vuoto nel primo caso?
Come uno dei creatori di Haskell ha detto (parafrasando) "Se la tua intera macchina funziona sulla base di un approccio puramente funzionale, tutto ciò che uscirai sarebbe una scatola calda, non vedresti mai i risultati aveva calcolato ". :) –