-
Пример рефакторинга неудачного устранения дублирования кода
Исходный код Что не так в исходном коде Из-за обилия ветвлений по флажку pdir алгоритм вышел за грань читаемости. Поверхностный анализ даёт понять, что pdir — указатель на изменяющуюся координату в матрице. Попробую расцепить алгоритм так, чтобы работа с каждой координатой велась полностью раздельно. Не очень понятно, зачем хранить в матрице строковые представления вещественных чисел, но ладно. Теперь сравнивая…
-
Пример рефакторинга алгоритма обработки строк с помощью функции стандартной библиотеки
Исходный код Что не так в исходном коде Здесь я вижу либо решение учебной задачи на циклы и ветвления, либо классический пример «велосипеда», свидетельствующий о глубоком незнании стандартной библиотеки языка. Большинство задач на обработку строк успешно решаются с помощью регулярных выражений. Например, для данного фрагмента отлично подходит функция preg_replace: Теория Благословение стандартных библиотек
-
Пример рефакторинга «извлечение функции» для вычисления цвета ячейки таблицы
Исходный код Как можно улучшить исходный код При беглом взгляде на код легко видеть, что его основную часть занимает вычисление цвета фона. Это достаточно осмысленная операция, чтобы её перенести в отдельную функцию: Вызов функции будет выглядеть так: В идеале подобные вопросы решаются через CSS-классы: функция должна возвращать имена классов для клетки таблицы, а в CSS…
-
Пример рефакторинга «извлечение метода» в алгоритме установки кода проекта
Исходный код Что не так в исходном коде Тут сразу два недочёта, которые непросто разглядеть. Во-первых, метод setTims выполняет две независмых вещи: получает номер TIMS; запоминает номер в некоем глобальном хранилище. Во вторых, реализация запоминания номера дублируется дважды. Как отрефакторить исходный код Для успешного рефакторинга необходимо разобраться в предметной области. После краткого анализа кода метода становится понятно,…
-
Пример рефакторинга «извлечение функции» при рендеринге заголовка страницы
Исходный код Что не так в исходном коде Этот короткий фрагмент кода знает о двух независимых вещах: что делать, если передан идентификатор производителя, и как получить название производителя из базы данных. Как элемент второго знания я бы выделил поиск производителя в базе данных. Как улучшить исходный код Обычно принято поднимать из базы не по одному…
-
Почему «неоптимальные» формулы могут быть полезны
Исходный код Что так в исходном коде Не всегда избыточные конструкции в коде нужно стремиться «сокращать». Код пишется исходя из предметной области, к которой он относится, и чем он к ней ближе — тем проще понимать такой код. Здесь у выражения n + 1 вполне может быть самостоятельный смысл, соответствующий предметной области. Сохраняя это выражение в исходном виде,…
-
Пример рефакторинга «выделение функции» при рендеринге изображения
Исходный код Что не так в исходном коде Эта функция — моё решение упражнения из тура по Go. Несмотря на то, что этот код написан мной, он не соответствует моему же канону. Здесь одна функция решает две задачи: выделить память под изображение и собственно отрендерить изображение. Как лучше распределить ответственности Теория Принцип единственного знания Рефакторинг «извлечение метода»
-
Пример рефакторинга «извлечение метода» для кода обновления таблицы
Исходный код Как делать рефакторинг «извлечение метода» Ищем короткие фрагменты, которые некие маленькие, законченные и осмысленные действия, и переносим эти фрагменты в отдельные методы. Это могут быть методы в том же самом или в совсем других классах. Обычно фрагмент определяется тем, какие переменные в нём задействованы. Удаление лишних строк из таблицы Вот такой фрагмент есть,…
-
Избыточные конструкции при получении кода статуса
Исходный код Что не так в этом коде Функция называется ShowUserRowStatus, хотя она ничего не показывает, а лишь возвращает специфическую строку. В алгоритме всего две альтернативы, однако применён оператор switch, что явно излишне. Присутствует переменная $content, без которой совершенно спокойно можно обойтись. Параметр $key не используется. Название параметра $value слишком общее, не отражает его смысла. Как отрефакторить исходный код Вполне вероятно, что…
-
Адская реализация алгоритма с метками и адским форматированием
Исходный код Что не так в этом коде В этом коде прекрасно всё: метки и переходы, создающие адски запутанный поток выполнения, однобуквенные переменные, слепленные в одну строку операторы. Прекрасный код для мониторов размером со спичечный коробок. Всё прекрасно, кроме одного — чтобы прочитать, понять и верифицировать этот код нужно примерно столько же времени, сколько на…