Функциональное программирование - Глоссарий

Глоссарий
Поделиться:

Что такое функциональное программирование?

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

Основные принципы

Чистые функции

Базовые принципы ФП, когда соблюдены условия: всегда возвращается одинаковый результат и отсутствуют побочные эффекты в процессе выполнения.
Пример на JavaScript:

var z = 10;

function add(x, y) {
	return x + y;
}

Неизменяемость данных

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

// Example of creating an immutable array
const originalArray = [1, 2, 3];
const immutableArray = [...originalArray, 4];

Функции высшего порядка

Передаются в качестве аргументов или возвращаются, что позволяет писать модульный и повторно используемый код.

 // Example of a higher-order function
function map(array, fn) {
	const result = [];
	for (let i = 0; i < array.length; i++) {
		result.push(fn(array[i]));
	}
	return result;
}

const numbers = [1, 2, 3];
const doubledNumbers = map(numbers, (num) => num * 2);

Рекурсия и отсутствие циклов

Рекурсия вместо циклов — это способность функций вызывать себя же для выполнения задач и работать внутри друг друга.

// Example of recursion
function factorial(n) {
	if (n === 0) {
		return 1;
	} else {
		return n * factorial(n - 1);
	}
}

console.log(factorial(5)); // Output: 120

Функциональные языки программирования

Примеры и особенности

Функциональные языки программирования можно поделить на две условные группы: строго ориентированные и мультипарадигменные. К первой группе относятся Haskell, Erlang, Elixir, F#, OCaml. Ко второй — Go, JavaScript.

Python, Java, C++ хоть и направлены больше на объектно-ориентированную парадигму, но также используют стиль ФП.

Haskell и его роль в развитии функционального программирования

Haskell характеризуется строгой типизацией и «ленивыми» функциями, когда вычисления проводятся только по мере необходимости, а остальное откладываются «на потом». Хаскелл помогает решать практические задачи:

  • Создавать ПО
  • Разрабатывать другие языки
  • Создавать инструменты для анализа языков
  • Разрабатывать прикладные приложения
  • Обрабатывать данные.

Python и поддержка функционального программирования

Python частично поддерживает парадигму ФП, хотя в меньшей степени, чем Хаскелл. Преимущество в том, что некоторые используемые в Python решения математических программ проще реализуются в функциональном стиле. Недостаток — изменяемость атрибутов в классах Python, что усложняет создание чистых неизменяемых функций.

Рекомендуется пользоваться принципом модульности при оформлении кода и переключаться на классы только в случае необходимости.

Преимущества и недостатки функционального программирования

Преимущества

  • Легкая настройка
  • Отложенное вычисление
  • Модульность чистых функций
  • Читаемость
  • Параллельная разработка.

Ограничения и недостатки

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

Сравнение с другими парадигмами разработки

Функциональное vs Императивное программирование

Приведем практический пример для понимания разницы между парадигмами. ИП напоминает правила умножения в столбик, когда последовательность действий четко определена в инструкцию. ФП не имеет инструкции, поэтому приходится решать самостоятельно, какое правило будет применимо в каждой ситуации и в какой последовательности.

Функциональное vs Объектно-ориентированное программирование

Объектно-ориентированное программирование использует объекты, а код представляет набор команд для компьютера. ФП представлено в виде функций, когда мы создаем новые данные на основе имеющихся, но запрещаем изменять существующие. Различаются также способы работы с информацией, структура программ и многое другое.

Применение функциональных языков в реальных проектах

Разработчики считают, что нужно разбираться во всех парадигмах и знать особенности применения каждой.

ФП помогает решать задачи для разработки высоконагруженных и распределенных программных продуктов. Например, применяется в работе с WhatsApp и Discord, обеспечивая им возможность справляться с мощным ростом пользователей и запросов. 900 млн пользователей WhatsApp поддерживает команда всего из 50 разработчиков, работающих на языке Erlang. Ежеминутные миллионные запросы в Discord поддерживаются с помощью языка Elixir.

Понравилась статья? Запишись в академию ifellow и узнай еще больше!

  • 3 направления
    15+ экспертов

    Школа тестирования

    • Функциональное тестирование
    • Курс нагрузочного тестирования
    • Курс автоматизированного тестирования
    Подробнее
    Иконка мини логотипа Иконка мини логотипа
  • 2 направления
    10+ экспертов

    Школа аналитики

    • Курс системного анализа Junior
    • Курс системного анализа Middle
    Подробнее
    Иконка мини логотипа Иконка мини логотипа
  • 1 направление
    2 эксперта

    Школа Java Разработки

    • Курс Java разработка
    Подробнее
    Иконка мини логотипа Иконка мини логотипа

Оставьте заявку на обучение в академии iFellow

Иконка мини логотипа

Нажимая на кнопку, вы соглашаетесь с Политикой конфиденциальности персональных данных

Задний фон блока

Файлы cookie обеспечивают работу наших сервисов. Используя наш сайт, вы соглашаетесь с нашими правилами в отношении этих файлов.