In more simple terms:

  • Pure deterministic function: The output is based entirely, and only, on the input values and nothing else: there is no other (hidden) input or state that it relies on to generate its output. There are no side-effects or other output.
  • Impure deterministic function: As with a deterministic function that is a pure function: the output is based entirely, and only, on the input values and nothing else: there is no other (hidden) input or state that it relies on to generate its output - however there is other output (side-effects).
  • Idempotency: The practical definition is that you can safely call the same function multiple times without fear of negative side-effects. More formally: there are no changes of state between subsequent identical calls

Нашел тут

Pure deterministicImpure deterministicPure NondeterministicImpure NondeterministicIdempotent
InputOnly parameter arguments (incl. this)Only parameter arguments (incl. this)Parameter arguments and hidden stateParameter arguments and hidden stateAny
OutputOnly return valueReturn value or side-effectsOnly return valueReturn value or side-effectsAny
Side-effectsNoneYesNoneYesAfter 1st call: Maybe. After 2nd call: None
SQL ExampleUCASECREATE TABLEGETDATEDROP TABLE
C# ExampleString.IndexOfDateTime.NowDirectory.Create(String)

Чем меньше побочных эффектов имеет функция, тем лучше.

Когда функция детерминированная и не имеет побочных эффектов, мы называем её “чистой” функцией. Чистые функции:

  • проще читать
  • проще отлаживать
  • проще тестировать
  • не зависят от порядка, в котором они вызываются
  • просто запустить параллельно (одновременно)

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

codedesigndeterministicidempotency