Чистая функция в JavaScript

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

На чистые функции очень просто писать unit тесты, она понятна для переиспользования и рассмотрим пару примеров:

// Базовый пример, это сумма чисел
function sum(a, b) {
  return a + b;
}

// Продвинутый пример из реальной жизни, может быть генерация ЧПУ
function translit(text){
        return text.replace( /([а-яё])|([\s_-])|([^a-z\d])/gi,
            function( all, ch, space, words, i ) {
                if ( space || words ) {
                    return space ? '-' : '';
                }
                var code = ch.charCodeAt(0),
                    next = text.charAt( i + 1 ),
                    index = code == 1025 || code == 1105 ? 0 :
                        code > 1071 ? code - 1071 : code - 1039,
                    t = ['yo','a','b','v','g','d','e','zh',
                        'z','i','y','k','l','m','n','o','p',
                        'r','s','t','u','f','h','c','ch','sh',
                        'shch','','y','','e','yu','ya'
                    ],
                    next = next && next.toUpperCase() === next ? 1 : 0;
                return ch.toUpperCase() === ch ? next ? t[ index ].toUpperCase() :
                    t[ index ].substr(0,1).toUpperCase() +
                        t[ index ].substring(1) : t[ index ];
            }
        );
}

И посмотрим какие могут быть «не чистые функции» или недетерминированные:

// использование внешних переменных, которые могут измениться
function costCalculator(a, b) {
  return a * b * CUSTOM_RATE_COEF;
}

// мутирование объекта, каллбеки
function superFunction(obj, cb) {
  obj.name = 'Иван';
  cb(obj)
}
Читайте также
Dev новости: готов Angular 19, генератор Nue, JetBrains
Dev новости: готов Angular 19, генератор Nue, JetBrains
Dev новости: готов Angular 19, генератор Nue, JetBrains

На следующей неделе разработчики смогут оценить новый релиз популярного фреймворка Angular 19. Его запуск запланирован на вторник, 19 ноября, 9:00 по тихоокеанскому времени. В преддверии этого события в разных городах мира пройдут онлайн- и оффлайн-вечеринки, хотя большинство из них пока что организованы вне США, включая несколько мероприятий во Франции.

10 методов для оптимизации производительности Laravel
10 методов для оптимизации производительности Laravel
10 методов для оптимизации производительности Laravel

В этом обзоре рассказываем о методах, которые могут повысить производительность вашего веб-приложения Laravel.

Dev новости:  Nuxt 3.9, Vue.js 3.4, анализируем React Server Components
Dev новости: Nuxt 3.9, Vue.js 3.4, анализируем React Server Components
Dev новости: Nuxt 3.9, Vue.js 3.4, анализируем React Server Components

Улучшения в Vue.js, анонс новых фич для версии 3.9 в Nuxt. Bun, Copilot и небольшой анализ react серверных компонентов.

Java: новости в октябре
Java: новости в октябре
Java: новости в октябре

Рассказываем о некоторых новостях в октябре в Java, среди них JDK 22, BellSoft, Oracle, GraalVM, Open Liberty.