Что такое идемпотентная операция?

Во время записи большинство браузеров возвращали свойства в том же порядке, в каком они были вставлены, но это явно не гарантированное поведение, поэтому на него не следует полагаться.

Спецификация ECMAScript говорила:

Механика и порядок перечисления свойств ... не указаны.

blockquote>

Однако в ES2015 и более поздние нецелые ключи будут возвращены в порядке вставки.

772
задан shA.t 12 July 2015 в 06:00
поделиться

7 ответов

В вычислениях идемпотентная операция - это операция, которая не имеет дополнительного эффекта, если она вызывается более одного раза с одинаковыми входными параметрами. Например, удаление элемента из набора может рассматриваться как идемпотентная операция на множестве.

В математике идемпотентная операция - это операция, где f (f (x)) = f (x) . Например, функция abs () идемпотентна, потому что abs (abs (x)) = abs (x) для всех x .

Эти несколько разные определения можно согласовать, если учесть, что x в математическом определении представляет состояние объекта, а f - это операция, которая может изменять этот объект. Например, рассмотрим набор Python и его метод discard . Метод discard удаляет элемент из набора и ничего не делает, если элемент не существует. Итак:

my_set.discard(x)

имеет точно такой же эффект, как выполнение одной и той же операции дважды:

my_set.discard(x)
my_set.discard(x)

Идемпотентные операции часто используются при разработке сетевых протоколов, где запрос на выполнение операции гарантированно произойдет хотя бы один раз, но может также случиться не раз. Если операция идемпотентна, то выполнение операции два или более раз не причинит вреда.

См. Статью в Википедии о идемпотентности для получения дополнительной информации.


В приведенном выше ответе ранее были некоторые неверные и неверные данные. вводящие в заблуждение примеры. Комментарии ниже, написанные до апреля 2014 г., относятся к более ранней версии.

888
ответ дан 22 November 2019 в 21:17
поделиться

Хороший пример понимания идемпотентной операции мог бы блокировать автомобиль с удаленным ключом.

log(Car.state) // unlocked

Remote.lock();
log(Car.state) // locked

Remote.lock();
Remote.lock();
Remote.lock();
log(Car.state) // locked

lock идемпотентная операция. Даже если существует некоторый побочный эффект каждый раз, когда Вы работаете lock, как мигание, автомобиль находится все еще в том же заблокированном состоянии.

0
ответ дан 22 November 2019 в 21:17
поделиться

Идемпотентная операция над набором оставляет его члены неизменными при применении один или несколько раз.

Это может быть унарная операция, например absolute (x) , где x принадлежит к набору натуральных чисел. Здесь absolute (absolute (x)) = x.

Это может быть бинарная операция, такая как объединение набора с самим собой всегда будет возвращать один и тот же набор.

Ура

7
ответ дан 22 November 2019 в 21:17
поделиться

Это любая операция, при которой каждый n-й результат приведет к выходу, совпадающему со значением 1-го результата. Например, абсолютное значение -1 равно 1. Абсолютное значение абсолютного значения -1 равно 1. Абсолютное значение абсолютного значения абсолютного значения -1 равно 1. И так далее.

См. Также: Когда будет действительно глупое время использовать рекурсию?

7
ответ дан 22 November 2019 в 21:17
поделиться

Независимо от того, сколько раз вы вызываете операцию, результат будет одним и тем же.

101
ответ дан 22 November 2019 в 21:17
поделиться

Хотя я склонен согласиться с приведенным выше сообщением, если вы должны сделать это:

23
ответ дан 22 November 2019 в 21:17
поделиться

Идемпотентная операция может быть повторена произвольное количество раз, и результат будет таким же, как если бы она была выполнена только один раз . В арифметике добавление нуля к числу идемпотентно.

Об идемпотентности много говорят в контексте веб-сервисов "RESTful". REST стремится максимально использовать HTTP для предоставления программам доступа к веб-контенту и обычно устанавливается в отличие от веб-служб на основе SOAP, которые просто туннелируют службы стиля удаленного вызова процедур внутри HTTP-запросов и ответов.

REST организует веб-приложение в «ресурсы» (например, пользователя Twitter или изображение Flickr), а затем использует HTTP-команды POST, PUT, GET, и DELETE для создания, обновления, чтения и удаления этих ресурсов.

Идемпотентность играет важную роль в REST. Если вы ПОЛУЧИТЕ представление ресурса REST (например, ПОЛУЧИТЕ изображение jpeg с Flickr), и операция завершится неудачно, вы можете просто повторять GET снова и снова, пока операция не завершится успешно. Для веб-службы не имеет значения, сколько раз было получено изображение. Точно так же, если вы используете веб-службу RESTful для обновления информации своей учетной записи Twitter, вы можете ВСТАВИТЬ новую информацию столько раз, сколько потребуется, чтобы получить подтверждение от веб-службы. Вставить тысячу раз - это то же самое, что и один раз. Точно так же УДАЛЕНИЕ ресурса REST тысячу раз равносильно его удалению один раз. Таким образом, идемпотентность значительно упрощает создание веб-службы, устойчивой к ошибкам связи.

Дополнительная литература: Веб-службы RESTful , Ричардсон и Руби (идемпотентность обсуждается на стр. 103-104), и Кандидатская диссертация Роя Филдинга по REST . Филдинг был одним из авторов HTTP 1.1, RFC-2616, в котором говорится об идемпотентности в разделе 9.1.2 .

Веб-службы RESTful , написанные Ричардсоном и Руби (идемпотентность обсуждается на страницах 103-104), и докторская диссертация Роя Филдинга по REST . Филдинг был одним из авторов HTTP 1.1, RFC-2616, в котором говорится об идемпотентности в разделе 9.1.2 .

Веб-службы RESTful , написанные Ричардсоном и Руби (идемпотентность обсуждается на страницах 103-104), и докторская диссертация Роя Филдинга по REST . Филдинг был одним из авторов HTTP 1.1, RFC-2616, в котором говорится об идемпотентности в разделе 9.1.2 .

131
ответ дан 22 November 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: