> For the complete documentation index, see [llms.txt](https://strctr.gitbook.io/programming/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://strctr.gitbook.io/programming/03-paradigms/fp/pure-functions.md).

# Pure Functions

* **Output of pure function depends only on (1) it's input parameters** and (2) it's internal algorithm.&#x20;
* **Сигнатура чистой функции должна говорить о ней все**. Pure functions signatures are meaningfull.&#x20;
* A pure function has no side effects.&#x20;
* Функции так же являются значениями в FP. В Scala есть функции и методы, и метод может быть конвертирован в функцию при помощи eta expansion-выражения. &#x20;

Преимущества:&#x20;

* Easy to write, easier to combine, easier to test, debug and parallelise.
* Pure functions are idempotent.&#x20;
* Referential transparency
* Memoizable
* Lazy

Приемы и методы:

* **HOF**
* **Generic Functions**
* **By-name** (lazy) **parameters**
* **Multiple parameters groups**
* **Control abstractions**
* **Implicit parameters**
* **Default parameter values**
* **Currying**  - функция с множеством параметров всегда может быть преобразована в серию вызовов функций, каждый из которых принимает единственный аргумент.&#x20;
* **Partially Applied Function** - новая функция, полученная путем связывания некоторых параметров функции со значениями.&#x20;

Статьи:

* [Функции и функциональный подход](http://fprog.ru/2009/issue1/roman-dushkin-functional-approach/)
