Post 2024-12-13
Некогда объяснять почему (если кратко, на рабочей встрече зацепились по терминологии) но захотелось рассказать про идемпотентность
Считается, что это понятие доступное и усвоенное всякими сеньор разработчиками (но, как вы понимаете, сегодня на рабочей встрече я узнал что некоторых моих коллег это обошло... всё всё обещал не отвлекаться на это — не буду) но в математике это грубо говоря когда x² = x
То есть это когда операция, применённая дважды, даёт тот же результат что и один раз. Например:
➡️|x| = x — модуль от модуля это тот же модуль
➡️max(max(x, y), y) = max(x, y) — максимум от максимума не изменится, если сравнить его опять с теми же числами
➡️x ∪ (x ∪ y) = x ∪ y — объединить множество с тем, что уже объединили получишь то что уже получил. Звучит как цитата Стэтхэма, пожалуй.
➡️x AND (x AND y) = x AND y — в логике тоже полно примеров. Молоко и кофе и молоко это то же самое что кофе и молоко. Ну, по составу во всяком случае.
А самый простой пример: x² = x. Какие числа удовлетворяют этому уравнению? Только 0 и 1! Эта штука родственна инволюции (когда x² = 1), только там работают 1 и -1. В группах это вообще целое отдельное развлечение — искать элементы с особыми свойствами при возведении в степень.
Ну вот, так вышло в общем, что и в программировании это тоже важная штука. Потому что "нажал дважды по ошибке" не должно ломать систему. Не должно.
Забавно что и 0 и 1 идемпотентны по умножению (x² = x), а вот по сложению только 0 справляется (x + x = x) 🤔