mirror of
https://github.com/yakimka/python_interview_questions.git
synced 2025-12-16 19:17:04 +03:00
Add coding principles content (#2)
* Add coding principles content * Refresh contributors * Update with coding principles content
This commit is contained in:
committed by
GitHub
parent
65a5f5679d
commit
2fbc9f28ca
@@ -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)
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
yakimka: https://github.com/yakimka
|
||||
- yakimka: https://github.com/yakimka
|
||||
- pavlenk0: https://github.com/pavlenk0
|
||||
|
||||
BIN
questions.epub
BIN
questions.epub
Binary file not shown.
26
questions.md
26
questions.md
@@ -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
|
||||
|
||||
Принцип *Don’t Repeat Yourself* («Не повторяйся») напоминает нам, что каждое повторяемое поведение в коде следует обособлять (например, выделять в отдельную функцию) для возможности многократного использования. Когда у вас в кодовой базе есть два совершенно одинаковых фрагмента кода, это не хорошо. Это часто приводит к рассинхронизации и прочим багам, не говоря уже о том, что от этого увеличивается размер программы.
|
||||
|
||||
### YAGNI
|
||||
|
||||
Принцип *You Aren’t Gonna Need It* («Тебе это не понадобится») говорит о том, что нежелательно оставлять в продакшене «точки расширения» (места, предназначенные только для того, чтобы позволить вам в будущем легко добавить новый функционал). Конечно, мы не говорим о случаях, когда речь идет об уже заказанном функционале. Такие точки расширения вносят ненужную сложность и увеличивают размер вашей кодовой базы.
|
||||
|
||||
### SLAP
|
||||
|
||||
Принцип *Single Level of Abstraction Principle* («Принцип единого уровня абстракций») означает, что функции должны иметь единый уровень абстракции. Скажем, функция, читающая input, не должна также обрабатывать полученные данные. Для этого она должна задействовать отдельную функцию, находящуюся на другом, более низком уровне абстракции. Чем более общей является функция и чем больше других функций она использует, тем выше она располагается в абстракционной иерархии.
|
||||
|
||||
### SOLID принципы
|
||||
|
||||
*SOLID* - это аббревиатура от 5 принципов, описанных Робертом Мартином, которые способствуют созданию хорошего объектно-ориентированного (и не только) кода.
|
||||
|
||||
**S**: Single Responsibility Principle (Принцип единственной ответственности).
|
||||
>Каждый класс должен решать лишь одну задачу.
|
||||
|
||||
Reference in New Issue
Block a user