Назад к вопросам
Junior
119
questionbank

Что такое принципы DRY и KISS в программировании?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Принцип DRY (Don't Repeat Yourself) означает "Не повторяйся". Его суть в том, чтобы избегать дублирования кода и данных. Вместо копирования логики, ее выносят в переиспользуемые функции, компоненты или модули. Это упрощает поддержку, снижает вероятность ошибок при изменениях и улучшает читаемость кода.

Принцип KISS (Keep It Simple, Stupid) означает "Делай проще, дурачок". Он призывает к созданию максимально простых и понятных решений. Избегайте излишней сложности, преждевременной оптимизации или использования сложных паттернов, если можно обойтись более простыми. Простой код легче понимать, тестировать и отлаживать.

Пример DRY в React:

// Дублирование в двух компонентах
function ButtonPrimary({ text, onClick }) {
  return <button className="button button--primary" onClick={onClick}>{text}</button>;
}

function LinkPrimary({ text, href }) {
  // Часть стилей дублируется
  return <a className="button button--primary" href={href}>{text}</a>;
}

// Применение DRY с помощью общего компонента
function PrimaryStyling({ children, as: Component = 'button', ...props }) {
  return <Component className="button button--primary" {...props}>{children}</Component>;
}

function ButtonPrimaryDRY({ text, onClick }) {
  return <PrimaryStyling onClick={onClick}>{text}</PrimaryStyling>;
}

function LinkPrimaryDRY({ text, href }) {
  return <PrimaryStyling as="a" href={href}>{text}</PrimaryStyling>;
}

Пример KISS на JavaScript:

// Излишне сложное решение подсчета суммы
function calculateSumComplex(numbers) {
  let sum = 0;
  if (Array.isArray(numbers)) {
    for (let i = 0; i < numbers.length; i++) {
      if (typeof numbers[i] === 'number' && !isNaN(numbers[i])) {
        sum += numbers[i];
      }
    }
  }
  return sum;
}

// Простое и понятное решение подсчета суммы (если входные данные ожидаемы)
function calculateSumKISS(numbers) {
  return numbers.reduce((sum, current) => sum + current, 0);
}