Ответ
DRY (Don’t Repeat Yourself) — принцип разработки программного обеспечения, направленный на минимизацию дублирования логики и знаний в системе. Каждая часть знания должна иметь единственное, однозначное и авторитетное представление в рамках системы.
Цель:
- Упрощение поддержки и модификации кода.
- Снижение вероятности ошибок из-за рассинхронизации копий.
- Повышение читаемости и переиспользования кода.
Пример нарушения DRY (Swift):
// Дублирование формулы расчета площади круга
func calculateAreaForCircleA(radius: Double) -> Double {
return Double.pi * radius * radius
}
func calculateAreaForCircleB(radius: Double) -> Double {
return 3.14159 * radius * radius // Разная константа!
}
Пример соблюдения DRY:
// Знание о расчете площади инкапсулировано в одном месте
struct Circle {
let radius: Double
private static let pi = Double.pi
func area() -> Double {
return Circle.pi * radius * radius
}
}
// Использование
let circle = Circle(radius: 5.0)
let area = circle.area()
Почему это важно? Если потребуется изменить формулу или константу, правка вносится только в одном месте — в методе area() структуры Circle.
Ответ 18+ 🔞
Да ты посмотри на эту дичь, блядь! Сидит программист, как мартышлюшка, и копирует один и тот же кусок кода туда-сюда, а потом охуевает, когда в одном месте поправил, а в другом забыл — и всё, пиздец, программа падает.
Вот смотри, есть такой принцип, DRY, что расшифровывается как «Don’t Repeat Yourself», или, по-нашему, «Не повторяйся, мудила». Смысл в чём? Каждая твоя мысль, каждый алгоритм, каждая формула — должны жить в одном-единственном святом месте. Один раз написал, один раз проверил, и везде используешь. А не как тот дебил, который площадь круга в десяти местах считает.
Зачем это, спросишь? Да чтобы не было вот этой пиздецовой рассинхронизации. Сегодня ты в одном файле константу pi поменял, а в другом — нихуя. И пошло-поехало: в одном модуле площадь правильная, а в другом — хуйня. Поддержка такого кода — это ебать мои старые костыли, терпения ноль ебать.
Вот тебе наглядный пиздец, то есть пример на Swift:
Смотри, как НЕ НАДО, блядь:
// Один чувак площадь считает так...
func calculateAreaForCircleA(radius: Double) -> Double {
return Double.pi * radius * radius
}
// А другой, блядь, так! И константу другую впендюрил!
func calculateAreaForCircleB(radius: Double) -> Double {
return 3.14159 * radius * radius // Разная константа, ёпта!
}
Представляешь? Один умник Double.pi использует, а другой — своё число вписал. И где правда? Пизда с ушами. Потом баг искать — волнение ебать.
А вот как надо, по-человечески:
// Всё, блядь, знание о круге и его площади — здесь. В одном месте. Авторитетно.
struct Circle {
let radius: Double
private static let pi = Double.pi // Константа — тут. Раз и нахуй.
func area() -> Double {
return Circle.pi * radius * radius
}
}
// Используем, блядь!
let circle = Circle(radius: 5.0)
let area = circle.area()
Видишь разницу, чувак? Формула и константа теперь живут в одном месте — внутри структуры Circle. Захотел поменять точность pi или вообще способ расчёта? Пожалуйста, иди в один-единственный метод area() и там всё делай. Всё остальное само подтянется. Никакого дублирования, никакой путаницы. Красота, ёперный театр!
Вот и весь принцип. Не плоди сущностей, не копипасть, а выноси общую логику. А то будешь потом, как Герасим, с мешком по берегу метаться и орать «Муму!», когда всё уже накрылось медным тазом.