- Published on
Idempotent
- Authors
- Ian Atha is an Athens-based technologist, ex-OpenAI, building at the intersection of craft, code, and civic life.

- Name
- Ian Atha
- @IanAtha
Idempotent
tl;dr: A function is idempotent if running it once, or n times, has the same effect.
An operation (function) is idempotent if and only if, multiple applications (executions) of it do not change anything beyond the first application (execution).
Consider, console.log('test'), for example.
It isn't idempotent, because multiple applications of it change the state of the screen beyond the first execution.
However, given the following function, idempotent_log('id_0', 'test') is idempotent:
const logged_keys = [];
function idempotent_log(idempotency_key: string, args: any...) {
if (logged_keys.indexOf(idempotency_key) == -1) {
console.log(...args);
logged_keys.push(idempotency_key);
}
}
I always like to think of idempotency in terms of a "lifetime"1. A lifetime is a property of every datum. Specifically, a datum's lifetime begins when it is created and ends when it is destroyed.
In the aforementioned example, idempotent_log('id_0', 'test') is idempotent within the lifetime of logged_keys.
Lastly, please note that the closure of idempotent_log('id_0', 'test') is ['id_0', 'test', logged_keys, console].
Footnotes
Ian Atha is an Athens-based technologist, ex-OpenAI, building at the intersection of craft, code, and civic life.