Matematicamente parlando, il termine che stai cercando è " Total Function " (una funzione definita per ogni possibile valore in qualche dominio), al contrario di una "funzione parziale", che è definita solo per un sottoinsieme dei possibili valori di input.
Si noti che, in senso stretto, le funzioni matematiche sono sempre totali nel proprio dominio; chiamare una funzione "parziale" ha senso solo se lo si confronta con un altro dominio, come la funzione f(x) = 1/x
: il dominio di questa funzione è il dominio di tutti i numeri reali tranne lo zero, ma contro il dominio di tutti i numeri reali (incluso zero), è parziale.
Nella programmazione, i tipi di input di una funzione indicano già un dominio, e non definendo la funzione per tutti loro, si potrebbe dire che la funzione è parziale. Tuttavia, molti linguaggi di programmazione ricadono in un comportamento predefinito quando non si restituiscono esplicitamente nulla: possono restituire 0, null
, undefined
, ecc. Tecnicamente parlando, tali funzioni sono ancora totali - restituiscono un valore per tutti possibili input -, ma concettualmente, ci sono lacune nella definizione. E non tutti i linguaggi di programmazione presentano tali fallback; le alternative si rifiutano di compilare, rispondendo con "comportamento indefinito", sollevando un'eccezione, ecc.
A proposito, nota che né il determinismo né la purezza hanno nulla a che fare con questo. Una funzione deterministica è quella che ha sempre lo stesso effetto dato lo stesso contesto (stato del sistema e input rilevanti); una funzione pura è una funzione che non ha effetti collaterali (in modo che restituisca sempre lo stesso valore dato gli stessi input, indipendentemente da qualsiasi stato esterno, e senza influenzare in alcun modo lo stato esterno). Puoi facilmente trovare una funzione parziale, ma completamente deterministica (ammesso che le funzioni parziali siano legali nel tuo linguaggio di programmazione e le lacune di definizione siano gestite in modo predicibile); e viceversa, se riesci a scrivere una funzione non deterministica, ad es. leggendo da una fonte di entropia hardware, non c'è motivo per cui debba essere totale (né parziale). Lo stesso vale per la purezza, a meno che una lacuna di definizione non introduca automaticamente effetti collaterali (allora anche tutte le funzioni pure devono essere totali).