Necesito la terminología adecuada para un tipo específico de función.¿Terminología para una función determinística sin efectos secundarios?
Supongamos que escribe una función en su base de datos SQL, cuyas entradas y salidas están dentro del alcance de una transacción de base de datos.
Es decir, si llama a esta función en el ámbito de una transacción de base de datos, todos los datos utilizados por la función están disponibles dentro del mismo ámbito. Puede consultar una tabla de base de datos, pero no puede leer un archivo del sistema de archivos o hacer ping a un sitio web, etc. Si llama a la función dos veces en una sola transacción con aislamiento REPEATABLE READ
, debe obtener el mismo resultado, incluso si otros clientes están haciendo cambios en la base de datos.
Del mismo modo, la función no tiene efectos secundarios, excepto dentro del mismo ámbito de transacción. Los cambios en el estado fuera del alcance de la transacción de la base de datos no están permitidos. La función no debe enviar correos electrónicos, ni escribir en el sistema de archivos, ni almacenar un valor en memcached
, etc. Si la función cambia datos dentro de la base de datos, está bien porque si la transacción de llamada se retrotrae, entonces los efectos de la función son también.
Los argumentos de la función son correctos, ya que básicamente se usan como constantes.
¿Cuál sería el término correcto para una función de este tipo? "Determinista" realmente no parece ser lo suficientemente específico. ¿Cómo describirías esta clase de función?
Gracias por sus respuestas, pero ninguno de ellos es exactamente lo que tenía en mente. Idempotent se acerca más, así que lo marqué como la respuesta aceptada. Pero cada uno de ustedes obtuvo un voto positivo de mi independientemente.
funciones puras no tienen efectos secundarios, y su resultado se basa únicamente en sus argumentos. El resultado dado los mismos argumentos es siempre idéntico. Esto no funciona porque las funciones de la base de datos que tengo en mente se pueden basar en el estado de los datos, y la función también puede afectar el estado de los datos.
Las funciones de iniciativa pueden devolver un resultado basado en el estado de los datos, y dado el mismo estado de datos, el resultado es siempre idéntico. Pero esto no funciona para lo que tengo en mente exactamente; los efectos de una función idempotente deben dar como resultado un resultado inmutable sin importar cuántas veces se llame a la función. Pero no hay distinción entre los cambios realizados dentro del aislamiento de transacción y los cambios realizados fuera de ese alcance.
Creo que está buscando algo más fuerte que eso; al menos, con respecto a todos los detalles del alcance que proporcionó, que no son relevantes para la idempotencia. – MarkusQ
No, no creo que haya querido llamar a la función sobre sus resultados ... que es lo que le importa a la idempotencia. – Varkhan
@Varkhan, estás usando el sentido matemático de idempotent, pero S. Lott está usando una definición relacionada común en la programación. Lee su enlace – RossFabricant