Являются ли идемпотентные функции такими же, как и чистые функции?

Я читал объяснение Википедии идемпотентности. Я знаю, что это означает, что выход функции определяется ее входом. Но я помню, что слышал очень похожее понятие: чистая функция. Я Google их, но не могу найти их разницу...

они эквивалентны?

6 ответов


идемпотентная функция может вызывать идемпотентные побочные эффекты.

чистая функция не может.

например, функция, которая задает текст текстового поля, является идемпотентной (поскольку несколько вызовов будут отображать один и тот же текст), но не чистой.
Аналогично, удаление записи по GUID (а не по count) является идемпотентным, поскольку строка остается удаленной после последующих вызовов. (дополнительные вызовы ничего не делают)


A чисто функция-это функция без побочных эффектов, где выход исключительно определяется входным сигналом-то есть вызовом f(x) даст тот же результат независимо от того, сколько раз вы это называете.

An идемпотентных функция-это функция, которая может применяться несколько раз без изменения результата - то есть f(f(x)) это то же самое, что f(x).

функция может быть чистой, идемпотентной, обеими или ни одной.


функциональная очищенность значит что никакие побочные эффекты. С другой стороны, идемпотенция означает, что функция инвариантна по отношению к нескольким вызовам.

каждая чистая функция является побочным эффектом идемпотентной, потому что чистые функции никогда не производят побочных эффектов, даже если они вызываются более одного раза. Однако возвращаемое значение idempotence означает, что f(f(x)) = f(x), которое не зависит от чистоты.


нет, идемпотентная функция изменит состояние программы/объекта/машины - и сделает это изменение только один раз (несмотря на повторные вызовы). Чистая функция ничего не меняет и продолжает предоставлять результат (return) каждый раз, когда она вызывается.


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

из Википедии (https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning)

в информатике термин идемпотент используется более полно для описания операции, которая приведет к одинаковым результатам при выполнении один или несколько раз. Это может быть различное значение в зависимости от контекста, в котором оно применяется. Например, в случае вызовов методов или подпрограмм с побочными эффектами это означает, что измененное состояние остается неизменным после первого вызова. Однако в функциональном программировании идемпотентная функция имеет свойство f(f(x)) = f (x) для любого значения x.


чистая функция = Идемпотентных + без изменения входных переменных.