-
Не-дублирование кода в обработчике клика
Исходный код Что так с этим кодом В заголовке нет опечатки. Да, именно так: я считаю, что подобные конструкции с дублированием вполне обоснованны, и вот почему. Прежде всего нужно смотреть на семантику кода: какого его предназначение, ради чего он здесь (см. FunctionLength). Касательно кода примера, в первом случае выполняется обработка клика по одному элементу, в…
-
Функция для подсветки отмеченных элементов
Исходный код Что не так в этом коде По реализации функции совершенно непонятно, что в ней происходит; невозможно понять её предназначение. Причина непонятности: непонятно, что означают все эти переменные (названия слабо указывают на предназначение переменных или не указывают вовсе) последовательность операций не позволяет увидеть алгоритм перемещения информации не позволяют увидеть за ними алгоритм Вариант рефакторинга…
-
Длинный и сложный код на Cи для поиска выхода из матрицы
Исходный код Что не так в этом коде Ни и чём не говорящие названия переменных Названия iii, ii, biii, bii выбраны крайне неудачно, так как ничего не говорят о том, к какой координате матрицы они имеют отношение — x или y. Ненужные переменные Вероятно, переменные biii, bii являются избыточными, так как я не вижу мест, где бы они принимали значения, отличные от исходных.…
-
Неудачная организация данных
Исходный код Что не так в этом коде Отдельные массивы вместо объектов Главная проблема здесь в том, что вместо массива объектов здесь использованы четыре отдельные массива, в результате чего данные каждой сущности необходимо собирать из четырёх разных мест. Невооружённым глазом видно, что здесь имеет место некая сущность «страница» со следующими свойствами: идентификатор родительская страница дочерние…
-
Неудачные названия методов и способ хранения состояния
Исходный код Что не так в этом коде запутанная логика показа или непоказа попапа: просто глядя на код, трудно понять, при каких условиях в итоге попап будет показан, а при каких нет (главным образом запутанность возникает из-за многочисленности условий и проверок) неудачные названия геттеров offsetTitleTop и offsetMenuTop — неясно, что конкретно происходит на странице, когда эти геттеры возвращают истину,…
-
Больше одного знания и одной сущности в методе показа выбранного месяца
Исходный код Что не так в этом коде нарушен принцип единственного знания: в одном методе сосредочена и обработка события, и запоминание состояния, и визуализация разных объектов нарушен принцип единственной сущности (здесь две сущности: календарь месяцев в целом и отдельный месяц) присваивание дефолтного значения с последующим перезатиранием неоптимальное распределение операций между частями связанного кода неудачное название…
-
Трудночитаемые подстановки плейсхолдеров в шаблоне строки
Исходный код Что не так в этом коде вложенные вызовы функций, которые тяжело читать привязка преобразования к конкретным переменным Как можно отрефакторить исходный код Понадобились две отдельных функции, так как подставить переменные в URL и очистить URL от лишних символов — две совершенно разные задачи. Теория Принцип независимости от источника Паттерн Input — Do — Output…
-
Чем плохо отсутствие сокрытия реализации
Что не так с этим кодом Автор классов TransactionResultItem и Account заставляет их пользователей (возможно, себя же) писать нечитаемые простыни кода, копаясь во всех самых потаённых деталях их реализации, да ещё и с применением магических литералов, вместо того, чтобы позволить пользователям задавать экземплярам классов несколько простых вопросов: транзакция принадлежит к такому-то виду транзакций? транзакция является входящей? транзакция является исходящей?…
-
Подсчёт количества записей; арифметические расчёты через циклы
Исходный код Что не так в этом коде Изменение параметров скрипта Это плохой способ вернуть результат выполнения функции, потому что затрудняет отслеживание изменений в данных. В какой-то момент ты обнаруживаешь, что передал в скрипт одни параметры, а в обработку пошли какие-то совсем другие, и невозможно найти место, где произошло превращение. Запомни: $_GET и $_POST — это входные параметры скрипта…
-
Пользуйся регулярными выражениями
Исходный код Что не так в этом коде Нет необходимости делать столько вызовов функции, когда можно сделать один. Как можно улучшить код Нужно написать регулярное выражение, включающее все необходимые символы: