У програмування, чиста функція — це функція, яка має такі властивості:
# повернені значення з функції тотожні для тотожних аргументів (ніяких змін разом з локальними статичними змінними, нелокальними змінними, мутовними аргументами-посиланями або потоками введення/виведення), і
# функція не має побічних впливів (не змінює локальні статичні змінні, нелокальні змінні, змінні аргументи-посилання або потоки введення/виведення).

Отже, чиста функція це обчислювальний аналог математичної функції. Деякі автори, особливо зі спільноти імперативних мов, використовують термін «чиста» для всіх функцій, що мають лише другу зі щойно наведених властивостей (обговорено нижче).

Приклад
Чисті функції
Наступні приклади функцій з C++ чисті:


Нечисті функції
Наступні функції C++ нечисті, бо їм бракує властивості 1:


Наступні функції в C++ нечисті, бо вони не мають властивості 2:


Наступні функції в C++ нечисті, бо вони не мають обох властивостей:


Оптимізації компілятора
Функції, що мають лише другу властивість дозволяють такі компіляторні техніки оптимізації як усунення спільних підвиразів і оптимізація циклів. Приклад на C++ це метод length, що повертає розмір рядка, що залежить від вмісту пам'яті, на яку вказує змінна, що порушує властивість 1. Проте, в однопотоковому середовищі, наступний код на C++

std::string s = "Hello, world!";
int a10 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int l = 0;

for (int i = 0; i 
можна оптимізувати так, що значення s.length() обчислене лише раз, перед циклом.

Примітки



