Code Quality Flashcards
Code Standards
Code Smells
Code Review Process
etc
Что такое стандарты написания кода?
Это набор правил, ограничивающий использование инструментов языка для обеспечения надёжности, читаемости исходного кода.
Какие примеры стандартов написания кода на JavaScript ты знаешь?
- Запрет на использование var
- Использование только именованных экспортов
- Строгое наличие default и break в switch/case
…
Какие запахи кода тебе известны?
- Дублирование кода
- Длинный метод
- Большой класс
- Длинный список параметров
- Расходящиеся модификации
- Стрельба дробью
- Завистливые функции
- Группы данных
- Выходные аргументы
- Бесконтрольные побочные эффекты
- Временные зависимости
- Теоретическая общность
- Комментарии
- Аргументы-флаги
Как может проявляться дублирование кода? Как с ним бороться?
- Одно выражение в методах одного класса. Нужно выделить в метод.
- Одно выражение в двух подклассах одного уровня. Нужно выделить и поднять в родителя.
- Одно выражение в разных классах. Нужно выделять в отдельный класс.
- Условные конструкции в разных частях кода, проверяющие одинаковые условия. Нужно использовать полиморфизм.
- Одинаковые алгоритмы в разных местах, но с отличиями в некоторых аспектах. Помогут паттерны Шаблонный Метод или Стратегия.
Чем плохи длинные методы? Как бороться с таким запахом?
Чем длиннее процедура, тем труднее её понять.
Нужно выделять под-методы с понятными названиями.
Чем чреват запах “большой класс”? Как с ним бороться?
Если класс реализует слишком много функциональности, он сложнее для понимания. Он так же может нарушать принцип единственной ответственности.
Решение: выделить функциональность в другой класс или подкласс.
Чем плох длинный список параметров? Как с ним бороться?
Чем больше параметров, тем сложнее понять функцию.
Лучше всего, когда аргументов вообще нет. Далее следуют унарные, бинарные и тернарные формы. Четыре и более аргументов - очень сомнительны, их лучше избегать.
Как различить запах “расходящиеся модификации”? Как с ним бороться?
Это когда изменение одного требования приводит к изменению большого числа фрагментов всего класса. Помогает выделение классов.
Как различить запах “стрельба дробью”? Как с ним бороться?
«Стрельба дробью» — это одно изменение, затрагивающее много классов.
Нужно перемещать поля/методы в новый или существующий класс.
Что означает запах “завистливые функции”? Как с ним бороться?
Метод обращается к данным другого объекта чаще, чем к собственным данным.
Лечится перемещением метода (целиком или выделяя под-методы и перемещая их).
Как определить запах “группы данных”? Как с ним бороться?
Если есть группа данных, из которой ничего нельзя удалить без потери смысла, то эту группу надо выносить в класс.
Чем плохи выходные аргументы? Как от них избавиться?
Читатель кода ожидает, что аргументы используются как входная, но не выходная информация.
Если функция должна изменять чьё-то состояние, её лучше сделать методом этого объекта.
Чем плохи бесконтрольные побочные эффекты?
Побочные эффекты суть ложь. Функция обещает что-то одно, но делает дополнительные действия скрытые от пользователя.
Побочные эффекты порождают нежелательные временные привязки, плохо тестируются, ужасно читаются.
Что такое “временнЫе зависимости”?
Если код может быть безопасно вызван только при определённых внешних условиях, это порождает временную привязку.
Если без временной привязки не обойтись, это должно быть чётко отражено в имени функции.
О чём говорит запах “теоретическая общность”?
Такой запах возникает если программист пытается обеспечить функциональность, которая возможно понадобится для будущих изменений.
Этот вопрос должен решаться на уровне архитектуры, а не реализации.