Имеет ли значение, если я уберу свое предложение об использовании, если удаленные единицы все еще используются в других единицах? - PullRequest
7 голосов
/ 18 апреля 2009

Лично мне нравится, если мои пункты uses настолько малы, насколько это возможно, но во многих приложениях действительно большие блоки (с точки зрения раздувания исполняемого файла), такие как Forms или VirtualTrees, необходимы как минимум в другом блоке. в любом случае.

Итак: имеет ли значение, если я уберу свои пункты uses, даже если в конце ни один модуль не будет удален из проекта? Если так: каким образом? И: Является ли очистка пункта uses чем-то, что должно быть сделано как можно скорее, или это может подождать, пока я случайно не найду неиспользуемый юнит?

Ответы [ 5 ]

14 голосов
/ 18 апреля 2009

Если он используется в другом месте в проекте, это не будет иметь большого значения, кроме как для создания более чистого кода, который легче читать. Однако есть несколько незначительных вещей, на которые он может повлиять.

Порядок компиляции: компилятор решает, в каком порядке компилировать модули, основываясь на том, какие модули используют какие модули. Если вы удалите модуль из условия использования более раннего модуля, это может привести к тому, что используемый модуль будет скомпилирован позднее в цикле компиляции. Это может показаться не так много, но имейте в виду, что секции initialization работают в том же порядке, в котором были скомпилированы модули. Это действительно не должно иметь большого значения для вашего проекта.

CodeInsight: когда вы открываете раскрывающийся список завершения кода, он предлагает варианты, основанные на всех доступных в настоящее время единицах. Вы можете уменьшить количество вариантов, через которые он должен фильтровать - и, следовательно, количество времени, которое требуется, чтобы потянуть кровавую штуку! - уменьшив количество единиц, которые вы используете. (Нет, я не горький. Почему ты спрашиваешь?)

9 голосов
/ 18 апреля 2009

Обычно нет. Если единица используется один раз в любом месте проекта, не имеет значения, сколько еще раз она будет использована. И наоборот, не имеет значения, из скольких мест вы удаляете юнит, если он еще где-то используется. Скомпилированная программа будет вести себя одинаково и иметь примерно одинаковый размер.

Единственная разница будет в порядке разделов инициализации и завершения модулей. Порядок использования юнитов влияет на порядок выполнения этих разделов, хотя точный эффект никогда не документировался (поэтому старайтесь не полагаться на порядок инициализации).

Но я все же призываю вас очистить списки ваших модулей, по той же причине, по которой вам рекомендуется очистить списки переменных и списки параметров. Когда вы избавляетесь от того, что вам не нужно, вам будет легче читать код, который вы сохранили, потому что вы можете быть достаточно уверены, что прочитанное дает точную картину того, что делает код. Если в вашем коде упоминается группа модулей, но они по-настоящему не используются, то в следующий раз, когда вы или кто-то другой посмотрите на код, есть хорошее изменение, которое вы собираетесь потратить некоторое время, пытаясь найти, где ваш код использует средства из этих подразделений. (Вы скажете себе: «Хм, этот код включает Graphics, но я не могу понять, где он что-то рисует. Лучше я еще раз посмотрю, потому что я не думал, что у этого кода есть такие обязанности». Эй, коллега, можешь ли ты уделить немного времени твоему дню, чтобы сказать мне, где этот блок рисует вещи? ")

5 голосов
/ 20 апреля 2009

Я категорически не согласен с Мейсоном и Робом: это действительно имеет значение!

Снижение зависимости.

Разница не в текущем проекте, как объясняли Мейсон и Роб. Вместо этого, разница в вашем следующем проекте. Если вы храните ненужные (серверные) модули в своем (клиентском) модуле, то использование этого клиентского модуля в другом проекте также приведет к появлению зависимостей. Если нет других оправданных клиентских юнитов для только что втянутых юнитов, то вы добавили наворот.

5 голосов
/ 18 апреля 2009

Да, есть один трюк , который часто упускается из виду и может укусить вас за спину:
Если есть какой-то код инициализации / финализации , он всегда выполняется , даже если в вашем модуле нет кода, вызываемого другим способом (а модуль всегда включен , пока можно подумать, что это не так). Таким образом, удаление модуля, который вам не нужен в вашем проекте, может иметь существенное значение.

Еще одна вещь, на которую стоит обратить внимание, это то, что порядок единиц определяет, какой идентификатор компилятор выберет s, когда есть омонимы в 2 разных единицах, и вы вызываете их без префикса с единицей имя (что вы всегда должны делать в качестве лучшей практики).

Кроме того, как указывали Мейсон и Роб, порядок единиц влияет на порядок, в котором они компилируются, и последовательность инициализации / финализации.

Что касается понимания кода, это будет быстрее, если вы удалите ненужные модули, но также и глобально, если все ваши модули, используемые в проекте, будут явно добавлены в dpr вместо того, чтобы полагаться на путь поиска, чтобы найти их, когда они неявно добавлено через другой блок.

4 голосов
/ 18 апреля 2009

Используйте бесплатный анализатор Pascal для поиска неиспользуемых единиц в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...