-
Магический литерал при преобразовании URL
Исходный код Что не так в исходном коде Здесь от урла отрезается начальная часть, по всей вероятности — доменное имя плюс одна-две верхних подпапки. Такой код, безусловно, работать будет, но только в очень ограниченных условиях. Например, код сразу сломается, если в него будет передан урл на другом домене (такое может случиться, когда этот код будет…
-
Сравнение с булевым литералом
Исходный код Что не так в этом коде Если у тебя есть переменная булева типа, то нет необходимости её сравнивать с истиной или ложью, можно напрямую передавать её в оператор if. Вместо if (result == true) пишем просто if (result). Если у тебя переменная какого-то другого типа, то следует пользоваться правилами неявного преобразования значений произвольного типа в булевы. Например,…
-
Лишнее условие при организации цикла
Исходный код Что не так в этом коде Тело цикла должно выполниться минимум один раз, но должно повторяться бесконечно, пока будут возникать ошибки БД (а они будут возникать в случае, если в таблицу добавляется уже существующий в ней идентификатор). Очевидно, что предназначение этого кода — генерация уникальных не последовательных идентификаторов. Для того, чтобы обеспечить выполнение…
-
Ответственность за получение списка размазана по разным методам
Исходный код Что не так в этом коде В исходном коде ответственность за формирование списка стратегий размазана между двумя методами: setup! и strategy_classes, причём одна и та же настройка стратегий выполняется двумя разными способами в методе setup!. Вариант рефакторинга После рефакторинга метод setup! занимается только настройкой стратегий, ничего не зная о том, как формируется список стратегий, причём настройку выполняет однообразно. Метод strategy_classes из…
-
Неточное название множества полей объекта
Исходный код Что не так в этом названии Название поля productAttributes говорит нам, что в нём содержится список атрибутов товара. Однако же применение этого списка исходит из того, что он содержит не просто поля товара, а поля, которые обязательно должны быть заполнены. Такой рассинхрон смысла названия и смысла применения неизбежно приведёт к тому, что в какой-то момент…
-
Смешанные ответственности (операции) разных уровней
Исходный код Исходный код предназначен для управления плавающим элементом на веб-странице: при определённых условиях он «заливает», при других — скроллится вместе с контентом страницы. Что не так в исходном коде Главный недостаток исходного кода — смешение ответственностей (знаний) разного уровня в одном методе. Тут и вычисление положения, в котором должен оказаться блок при каждом положении скроллинга,…
-
Хранение булевых значений в битах числа
Исходный код Что не так в этом коде сильно сниженная читаемость повышенный риск багов Подобная экономность хороша на встроенных системах с 1 кб ОЗУ. Не могу представить, чтобы в современных условиях в браузере подобный приём мог дать хотя бы просто заметную экономию ресурсов. Возможно, выгода ожидалась от чего-то другого, например от передачи всех флагов состояния…
-
Замена и восстановление логотипа модуля на странице сайта
Исходный код Что не так в этом коде Единственный недостаток данного фрагмента кода заключается в неудачно выбранном названии функции, выполняющей восстановление логотипа. Оно образовано от русского эквивалента «вернуть исходный логотип», поэтому употреблено слово «return». Здесь же фактически выполняется операция восстановления, поэтому по смыслу больше подходит слово «restore». Что так в этом коде Несмотря на кажущееся…
-
Виртуозное применение дженериков
Исходный код Что не так в этом коде Я не нашёл в этом методе экземпляра обращения к полям экземпляра, в нём только работа с аргументом метода. Это означает, что метод, принадлежащий сущности, работает не с этой сущностью, а с какими-то другими сущностями, что нарушает принцип инкапсуляции и поэтому в корне неверно. Вижу обилие сложных структур…
-
Получение одного значения свойства из коллекции объектов
Исходный код Что не так с этим кодом Приходится прилагать усилия для того, чтобы понять алгоритм (вернуть значение заданное свойство из первого по списку объекта, у которого оно есть и непустое). Сложность возникла из-за того, что проверка значения оторвана от получения значения, да ещё и опережает её. В идеале для проверки следовало бы применить явный…