Идемпотентные функции - это то же самое, что и чистые функции? - PullRequest
53 голосов
/ 26 января 2011

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

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

Ответы [ 6 ]

53 голосов
/ 26 января 2011

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

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

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

14 голосов
/ 26 января 2011
Функция

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

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

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

4 голосов
/ 28 марта 2012

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

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

3 голосов
/ 26 января 2011

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

2 голосов
/ 24 июля 2016

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

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

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

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

0 голосов
/ 07 октября 2015

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

...