Чистая функция в 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)
}
Читайте также
Текстовые приложения на основе Python переходят в веб
Текстовые приложения на основе Python переходят в веб
Текстовые приложения на основе Python переходят в веб

Облачный сервис Textual Cloud Service позволит запускать в веб-браузерах консоли на языке Python, которые созданы с использованием фреймворка Textual.

Dev новости: Альтернатива Copilot, Python AI tool, RSC улучшения
Dev новости: Альтернатива Copilot, Python AI tool, RSC улучшения
Dev новости: Альтернатива Copilot, Python AI tool, RSC улучшения

Разработчики не идут в крипту, аналог Copilot, AI && Python, Новый Storybook 8 и подборка новостей

Ретроспектива React.js
Ретроспектива React.js
Ретроспектива React.js

Посмотрим что было важного в последних версиях react.js. Рассмотрены будут только ключевые изменения в новых версиях.

Angular V17: главные обновления
Angular V17: главные обновления
Angular V17: главные обновления

Вышло обновление фреймворка Angular V17: увеличение производительности, расширенные возможности, разработка с прицелом на будущее.