В чем разница между ООП и функциональным программированием

«В чем разница между ООП и функциональным программированием» — вопрос из категории Архитектура, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ООП основано на объектах, инкапсуляции, наследовании и полиморфизме. Данные и методы объединяются в классы, работа идёт через изменение состояния объектов.

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

Пример ООП:

class User {
  constructor(name) {
    this.name = name;
  }
  greet() {
    return `Hello, ${this.name}!`;
  }
}

Пример ФП:

const greet = (name) => `Hello, ${name}!`;
const exclaim = (str) => `${str}!!!`;
const greetLoudly = (name) => exclaim(greet(name));

Ключевые различия:

  • ООП: состояние + поведение в объектах
  • ФП: данные + функции разделены
  • ООП: мутация состояния
  • ФП: иммутабельность
  • ООП: императивный стиль
  • ФП: декларативный стиль