Являются ли идемпотентные функции такими же, как чистые функции?
Я читал в Википедии объяснение идемпотенции.
Я знаю, что это означает, что выход функции определяется его вводом.
Но я помню, что я слышал очень похожее понятие: чистая функция.
Я Google их, но не могу найти их разницу...
Являются ли они эквивалентными?
Ответы
Ответ 1
Идемпотентная функция может вызывать идемпотентные побочные эффекты.
Чистая функция не может.
Например, функция, которая устанавливает текст текстового поля, является идемпотентной (поскольку несколько вызовов будут отображать один и тот же текст), но не чистые.
Аналогично, удаление записи по GUID (не по счету) является идемпотентным, поскольку строка остается удаленной после последующих вызовов. (дополнительные вызовы ничего не делают)
Ответ 2
Чистая функция - это функция без побочных эффектов, когда выход определяется исключительно входом - то есть вызов f(x)
даст тот же результат независимо от того, сколько раз вы его вызываете.
Идемпотентная функция - это функция, которая может применяться многократно без изменения результата, т.е. f(f(x))
совпадает с f(x)
.
Функция может быть чистой, идемпотентной, и той, и другой.
Ответ 3
Нет, идемпотентная функция изменит состояние программы/объекта/машины - и сделает это изменение только один раз (несмотря на повторные вызовы). Чистая функция ничего не меняет и продолжает предоставлять результат (возврат) каждый раз, когда он вызывается.
Ответ 4
Функциональная чистота означает, что побочных эффектов нет. С другой стороны, идемпотентность означает, что функция инвариантна относительно множества вызовов.
Всякая чистая функция - побочный эффект идемпотент, потому что чистые функции никогда не производят побочных эффектов, даже если их называют более одного раза. Однако идемпотенция возвращаемого значения означает, что f (f (x)) = f (x), которая не выполняется чистотой.
Ответ 5
Чистая функция = Идемпотент + Нет изменений входных переменных.
Ответ 6
Большой источник замешательства заключается в том, что в информатике, по-видимому, существуют разные определения идемпотенции в императивном и функциональном программировании.
Из wikipedia (https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning)
В информатике термин idempotent более полно используется для описания операции, которая будет давать одни и те же результаты, если выполняется один или несколько раз. Это может иметь другое значение в зависимости от контекста, в котором он применяется. Например, в случае методов или подпрограмм с побочными эффектами это означает, что измененное состояние остается неизменным после первого вызова. Однако в функциональном программировании функция идемпотента - это функция, которая имеет свойство f (f (x)) = f (x) для любого значения x.
Поскольку чистая функция не создает побочных эффектов, я придерживаюсь мнения, что идемпотентность не имеет ничего общего с чистотой.