Add coding principles content (#2)

* Add coding principles content

* Refresh contributors

* Update with coding principles content
This commit is contained in:
Volodymyr Pavlenko
2021-04-07 13:11:05 +03:00
committed by GitHub
parent 65a5f5679d
commit 2fbc9f28ca
4 changed files with 33 additions and 3 deletions

View File

@@ -231,7 +231,12 @@
+ [Наследование](questions.md/#Наследование)
+ [Полиморфизм](questions.md/#Полиморфизм)
+ [Абстракция](questions.md/#Абстракция)
* [SOLID, что означает, общее понимание](questions.md/#SOLID-что-означает-общее-понимание)
* [Какие принципы программирования вы знаете](questions.md/#Какиe-принципы-программирования-вы-знаете)
+ [KISS](questions.md/#KISS)
+ [DRY](questions.md/#DRY)
+ [YAGNI](questions.md/#YAGNI)
+ [SLAP](questions.md/#SLAP)
+ [SOLID принципы](questions.md/#SOLID-принципы)
* [Что такое code cohesion & code coupling](questions.md/#Что-такое-code-cohesion--code-coupling)
* [Какие шаблоны проектирования вы знаете](questions.md/#Какие-шаблоны-проектирования-вы-знаете)
+ [Порождающие (Creational)](questions.md/#Порождающие-Creational)

View File

@@ -1 +1,2 @@
yakimka: https://github.com/yakimka
- yakimka: https://github.com/yakimka
- pavlenk0: https://github.com/pavlenk0

Binary file not shown.

View File

@@ -2130,7 +2130,31 @@ HTTPS — расширение протокола HTTP, поддерживающ
Часто путают с инкапсуляцией, потому что и то и другое косвенно влияет на формирование публичного интерфейса типа.
Довольно тривиальная парадигма и поэтому часто не указывается как таковая.
## SOLID, что означает, общее понимание
## Какие принципы программирования вы знаете
- [10 Coding principles and acronyms demystified!](https://areknawo.com/10-coding-principles-and-acronyms-demystified/)
### KISS
Принцип *Keep It Stupid Simple* («Придерживайся простоты») велит вам следить за тем, чтобы код оставался как можно более простым. Чем код проще, тем легче в нем разобраться, как вам, так и другим людям, занимающимся его поддержкой. Под простотой главным образом имеется в виду отказ от использования хитроумных приемов и ненужного усложнения.
В качестве примеров нарушения этого принципа можно назвать написание отдельной функции только лишь для осуществления операции сложения или использование побитового оператора (right shift >> 1) для деления целых чисел на 2. Последнее, безусловно, более эффективно, чем обычное (/2), но при этом очень сильно снижается понятность кода. Применяя такой подход, вы осуществляете clever coding («заумный кодинг») и over-optimization (чрезмерную оптимизацию). И то, и другое в долгосрочной перспективе не слишком хорошо сказывается на здоровье вашего кода.
### DRY
Принцип *Dont Repeat Yourself* («Не повторяйся») напоминает нам, что каждое повторяемое поведение в коде следует обособлять (например, выделять в отдельную функцию) для возможности многократного использования. Когда у вас в кодовой базе есть два совершенно одинаковых фрагмента кода, это не хорошо. Это часто приводит к рассинхронизации и прочим багам, не говоря уже о том, что от этого увеличивается размер программы.
### YAGNI
Принцип *You Arent Gonna Need It* («Тебе это не понадобится») говорит о том, что нежелательно оставлять в продакшене «точки расширения» (места, предназначенные только для того, чтобы позволить вам в будущем легко добавить новый функционал). Конечно, мы не говорим о случаях, когда речь идет об уже заказанном функционале. Такие точки расширения вносят ненужную сложность и увеличивают размер вашей кодовой базы.
### SLAP
Принцип *Single Level of Abstraction Principle* («Принцип единого уровня абстракций») означает, что функции должны иметь единый уровень абстракции. Скажем, функция, читающая input, не должна также обрабатывать полученные данные. Для этого она должна задействовать отдельную функцию, находящуюся на другом, более низком уровне абстракции. Чем более общей является функция и чем больше других функций она использует, тем выше она располагается в абстракционной иерархии.
### SOLID принципы
*SOLID* - это аббревиатура от 5 принципов, описанных Робертом Мартином, которые способствуют созданию хорошего объектно-ориентированного (и не только) кода.
**S**: Single Responsibility Principle (Принцип единственной ответственности).
>Каждый класс должен решать лишь одну задачу.