Идемпотентность в JavaScript. Принцип надёжности для кода и API.
Что
Зачем это в реальной разработке?
Не
Да
Идемпотентность vs Детерминированность
Итог. Зачем это вам?
434.72K

Идемпотентность

1. Идемпотентность в JavaScript. Принцип надёжности для кода и API.

ИДЕМПОТЕНТНОСТЬ В JAVASCRIPT.
ПРИНЦИП НАДЁЖНОСТИ ДЛЯ КОДА
И API.

2. Что

• Идемпотентность — это свойство операции,
которое гарантирует одинаковый результат
независимо от того, сколько раз она
выполняется
• Другими словами, выполнение
идемпотентной операции несколько раз не
должно изменять результат после первого
успешного выполнения.
• Это понятие важно в программировании,
особенно при работе с сетевыми запросами и
базами данных, где повторные действия могут
привести к нежелательным последствиям.

3. Зачем это в реальной разработке?

• Типичные проблемы, которые решает
идемпотентность:
• UI: Пользователь дважды кликает на кнопку
"Сохранить". Без идемпотентности создадутся две
одинаковых записи.
• Сеть: Повторная отправка неудачного HTTP-запроса
(например, из-за плохой связи). Идемпотентный запрос
(PUT, DELETE) не создаст проблем.
• Обработка событий: Событие может сработать чаще,
чем мы ожидаем. Наш обработчик должен быть к этому
готов.

4. Не

let count = 0;
// ПЛОХО: функция добавляет +1 каждый раз
function badCounter () {
count = count + 1;
}
badCounter (); // count = 1
badCounter (); // count = 2
badCounter (); // count = 3
Что произошло? Каждый вызов меняет результат.

5. Да

let count = 0;
// ХОРОШО: функция УСТАНАВЛИВАЕТ значение
function goodCounter() {
count = 1; // Устанавливает, а не добавляет
}
goodCounter (); // count = 1
goodCounter (); // count = 1
goodCounter (); // count = 1
Что изменилось? Сколько бы раз мы ни вызвали функцию,
итоговое состояние (count = 1) не меняется.

6. Идемпотентность vs Детерминированность

Детерминированность:
Функция всегда возвращает
одинаковый результат для одинаковых
входных данных.
f(2, 3) = 5 // Всегда и везде
Идемпотентность:
Функция приводит систему к
одинаковому конечному состоянию,
даже
если её вызвать много
раз.
оплатитьЗаказ(id=123)
→ статус
Это про результат
вычисления.
Это про побочный эффект и состояние
системы.
"Оплачен" Повторный вызов не создаст
новый платёж
Все идемпотентные операции в каком-то смысле предсказуемы,
но не все детерминированные операции безопасны для
повторения.

7. Итог. Зачем это вам?

Идемпотентный код — это надёжность.
Проще тестировать
Проще отлаживать
Безопасно для повторов и асинхронности
Основа предсказуемых систем
English     Русский Правила