Nella maggior parte dei linguaggi di programmazione, gli argomenti passati a una funzione vengono valutati prima della, la funzione li utilizza, ovvero vengono valutati in modo impaziente.Perché la maggior parte dei linguaggi di programmazione utilizza una valutazione entusiasta per gli argomenti passati a una funzione?
Per me, sembra molto più sensato valutare gli argomenti solo una volta che la funzione li utilizza, cioè pigramente. Questo ha più senso per me perché sembra che avrebbe un vantaggio in termini di prestazioni: perché valutare cose che non sono mai nemmeno necessarie?
Inoltre, si supponga di voler implementare una funzione if
che accetta un valore booleano, e un oggetto da restituire se la booleana è vero, e un altro oggetto da restituire se la booleana è falsa:
object if(bool condition, object valueIfTrue, object valueIfFalse) {
if(condition) return valueIfTrue;
return valueIfFalse;
}
In un linguaggio che valuta con entusiasmo gli argomenti, entrambi gli oggetti vengono sempre valutati anche se la funzione avrà sempre bisogno solo di uno di essi, che, nella migliore delle ipotesi, incorre in un leggero overhead non necessario e, nel peggiore dei casi, provoca un loop infinito.
Detto questo, dal momento che la maggior parte dei linguaggi di programmazione utilizza una valutazione impaziente degli argomenti delle funzioni, presumo che debba esserci una ragione per cui di solito è fatta in questo modo. C'è un grande vantaggio di una valutazione entusiasta qui che sto trascurando, è solo perché è stato più facile implementare i linguaggi in quel modo, è solo tradizione, o cosa?
Perché è facile compilare/interpretare il codice in quei linguaggi non pigri. –