> For the complete documentation index, see [llms.txt](https://vbrazhnik.gitbook.io/programming-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://vbrazhnik.gitbook.io/programming-notes/coding-principles.md).

# Принципы программирования

## DRY

DRY — **D**on't **R**epeat **Y**ourself («Не повторяйся»).

DRY — это принцип, нацеленный на снижение повторения информации различного рода.

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

Если код не дублируется, то для изменения логики достаточно внесения исправлений всего в одном месте и проще тестировать одну (пусть и более сложную) функцию, а не набор из десятков однотипных. Следование принципу DRY всегда приводит к декомпозиции сложных алгоритмов на простые функции. А декомпозиция сложных операций на более простые (и повторно используемые) значительно упрощает понимание программного кода. Повторное использование функций, вынесенных из сложных алгоритмов, позволяет сократить время разработки и тестирования новой функциональности.

Следование принципу программирования DRY позволяет добиться высокой сопровождаемости проекта, простоты внесения изменений и качественного тестирования.

Нарушение принципа DRY называют WET. Эта аббревиатура расшифровывается как **W**rite **E**verything **T**wice («Пиши всё дважды»).

В противопоставлении данных аббревиатур заложена игра слов — dry («сухой») против wet («влажный»).

## KISS

KISS — **K**eep **I**t **S**hort and **S**imple («Делай короче и проще»); **K**eep **I**t **S**imple, **S**tupid («Не усложняй, тупица»).

KISS — это принцип проектирования и программирования, при котором простота системы декларируется в качестве основной цели или ценности.

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

## YAGNI

YAGNI — **Y**ou **A**in't **G**onna **N**eed **I**t («Вам это не понадобится»).

YAGNI — принцип проектирования, при котором в качестве основной цели и ценности декларируется отказ от избыточной функциональности. То есть возможности, которые не описаны в требованиях к системе, просто не должны реализовываться.

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

**Источники информации:**

* [«Принцип программирования DRY — don’t repeat yourself / не повторяйте себя»](https://web-creator.ru/articles/dry)
* [«Принципы программирования: расшифровываем аббревиатуры»](https://techrocks.ru/2020/01/01/10-coding-principles-demystified/)
* [«Принцип программирования YAGNI — “Вам это не понадобится”»](https://web-creator.ru/articles/yagni)
