Ответ
DRY (Don't Repeat Yourself) — принцип разработки, при котором каждая часть знания или логики должна иметь единственное, однозначное представление в системе. Это помогает избежать дублирования кода, упрощает поддержку и снижает вероятность ошибок.
Пример нарушения DRY:
function calculateArea(width, height) {
return width * height;
}
function calculateVolume(width, height, depth) {
return width * height * depth;
}
Исправленный вариант:
function multiply(a, b) {
return a * b;
}
function calculateArea(width, height) {
return multiply(width, height);
}
function calculateVolume(width, height, depth) {
return multiply(multiply(width, height), depth);
}
Важно не переусердствовать — иногда лучше небольшое дублирование, чем излишняя абстракция.
Ответ 18+ 🔞
А, ну это же классика, блядь! Принцип DRY. Расшифровывается как "Don't Repeat Yourself", а по-нашему — "Не повторяйся, ёпта".
Смысл в чём, сука? Чтобы каждая идея, каждый кусок логики в твоём коде жил в одном-единственном месте. Не размазан по всему проекту, как говно по стенке. Зачем? Да чтобы потом, когда тебе начальник скажет: "Вася, поменяй вот эту формулу расчёта площади", ты не бегал как угорелый, меняя её в двадцати функциях, а пошёл в одно место, чих-пых, и всё исправил. И не обосрался, что где-то забыл.
Смотри, вот тебе пример, как делать НЕ НАДО, прям как у некоторых "архитекторов":
function calculateArea(width, height) {
return width * height;
}
function calculateVolume(width, height, depth) {
return width * height * depth;
}
Видишь? Умножение width * height повторяется, сука! А если мы там накосячили? Или хотим добавить округление? Придётся в двух местах ковыряться. Пиздец, а не подход.
А теперь смотри, как красавчики делают:
function multiply(a, b) {
return a * b;
}
function calculateArea(width, height) {
return multiply(width, height);
}
function calculateVolume(width, height, depth) {
return multiply(multiply(width, height), depth);
}
Вот! Вся логика умножения теперь в одной функции multiply. Хочешь её поменять? Пожалуйста — один раз и навсегда. Красота, блядь!
Но вот тут, сука, главный подвох! Нельзя с этим принципом, как с манной кашей, обосраться. Иногда начинающие гении так увлекаются, что выносят ВСЁ. Получается такая хуйня, где чтобы чайник вскипятить, нужно вызвать функцию boilWater(), которая вызывает getElectricity(), которая дергает checkFuse(), а та, блядь, стучится в базу данных... В итоге код превращается в ёбаную абстракцию ради абстракции, понять ничего нельзя, отладка — ад.
Иногда проще и честнее оставить два похожих, но РАЗНЫХ куска кода рядом. Чем связывать их в одну супер-функцию с кучей условий, которая делает и то, и сё, и ещё по-третьему, если передать specialFlag = true. Это уже не DRY, а пиздопроебина полная.
Короче, правило такое: если изменение в одной логике ДОЛЖНО повлечь изменение в другой — это дублирование, убивай его. А если это просто два похожих, но независимых куска — можешь расслабить булки. Главное — мозг включать, а не слепо следовать мантрам.