diff --git a/README.md b/README.md index 37e3e03..d1560d7 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/contributors.md b/contributors.md index 16359f0..08b91c7 100644 --- a/contributors.md +++ b/contributors.md @@ -1 +1,2 @@ -yakimka: https://github.com/yakimka +- yakimka: https://github.com/yakimka +- pavlenk0: https://github.com/pavlenk0 diff --git a/questions.epub b/questions.epub index fb6cd62..75d99f5 100644 Binary files a/questions.epub and b/questions.epub differ diff --git a/questions.md b/questions.md index 88bb0c4..4e1c23d 100644 --- a/questions.md +++ b/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 (Принцип единственной ответственности). >Каждый класс должен решать лишь одну задачу.