Имеет ли значение, если я уберу свое предложение об использовании, если удаленные единицы все еще используются в других единицах?
Лично мне нравится, если мой uses
предложения настолько малы, насколько это возможно, но во многих приложениях действительно большие блоки (с точки зрения раздувания исполняемого файла), такие как Forms
или же VirtualTrees
в любом случае необходимы по крайней мере в другом подразделении.
Итак: имеет ли значение, если я уберу свой uses
пункты, даже если в конце ни один блок не будет удален из проекта? Если так: каким образом? А: чистит uses
Что-то, что должно быть сделано как можно скорее, или это может подождать, пока я случайно не найду неиспользуемый блок?
5 ответов
Если он используется в другом месте в проекте, это не будет иметь большого значения, кроме как для создания более чистого кода, который легче читать. Однако есть несколько незначительных вещей, на которые это может повлиять.
Порядок компиляции: компилятор решает, в каком порядке компилировать модули, основываясь на том, какие модули используют какие модули. Если вы удалите модуль из условия использования более раннего модуля, это может привести к тому, что использованный модуль будет скомпилирован позднее в цикле компиляции. Это может показаться не так много, но имейте в виду, что разделы инициализации работают в том же порядке, в котором были скомпилированы модули. Это действительно не должно иметь большого значения для вашего проекта.
CodeInsight: когда вы открываете раскрывающийся список завершения кода, он предлагает варианты, основанные на всех доступных в настоящее время единицах измерения. Вы можете уменьшить количество вариантов, через которые он должен фильтровать - и, следовательно, количество времени, которое требуется, чтобы потянуть кровавую штуку!- уменьшив количество единиц, которые вы используете. (Нет, я не горький. Почему ты спрашиваешь?)
Вообще нет. Если единица используется один раз, в любом месте проекта, не имеет значения, сколько еще раз она будет использована. И наоборот, не имеет значения, из скольких мест вы удаляете юнит, если он еще где-то используется. Скомпилированная программа будет вести себя одинаково и иметь примерно одинаковый размер.
Единственная разница будет в порядке инициализации модуля и разделов финализации. Порядок использования юнитов влияет на порядок, в котором выполняются эти разделы, хотя точный эффект никогда не документировался (поэтому постарайтесь не полагаться на порядок инициализации).
Но я все же призываю вас очистить списки ваших модулей, по той же причине, по которой вам рекомендуется очистить списки переменных и списки параметров. Когда вы избавляетесь от того, что вам не нужно, вам легче читать код, который вы сохранили, потому что вы можете быть достаточно уверены, что прочитанное дает точную картину того, что делает код. Если в вашем коде упоминается группа модулей, но они на самом деле их не используют, то в следующий раз, когда вы или кто-то другой посмотрите на код, есть хорошее изменение, которое вы собираетесь потратить некоторое время, пытаясь найти, где ваш код использует средства из этих подразделений. (Вы скажете себе: "Хм, этот код включает в себя Graphics
, но я не вижу, где он что-то рисует. Я бы лучше взглянул еще раз, потому что я не думал, что у этого кода есть какие-то обязанности. Эй, коллега, не могли бы вы потратить некоторое время из своего дня, чтобы сказать мне, где этот блок рисует вещи?")
Я категорически не согласен с Мейсоном и Робом: это действительно имеет значение!
Снижение зависимости.
Разница не в текущем проекте, как объясняли Мейсон и Роб. Вместо этого, разница в вашем следующем проекте. Если вы оставите ненужные (серверные) модули в своем (клиентском) модуле, то использование этого клиентского модуля в другом проекте также приведет к появлению зависимостей. Если нет других оправданных клиентских юнитов для только что втянутых юнитов, то вы добавили раздувание.
Да, есть одна хитрость, которая часто упускается из виду и может привести к укусам в спину:
Если есть некоторый код инициализации / финализации, он всегда выполняется, даже если в вашем модуле нет кода, вызываемого другим способом (и модуль всегда включен, хотя вы думаете, что это не так). Таким образом, удаление модуля, который вам не нужен в вашем проекте, может иметь существенное значение.
Стоит также отметить, что порядок единиц определяет, какой идентификатор выбирает компилятор, когда есть омонимы в 2 разных единицах, и вы называете их без префикса с именем единицы (что всегда следует делать в качестве рекомендации).
Помимо этого, как указали Мейсон и Роб, порядок единиц влияет на порядок их компиляции и последовательность инициализации / финализации.
Что касается понимания кода, будет быстрее, если вы удалите ненужные модули, но также и глобально, если все ваши модули, используемые в проекте, будут явно добавлены в dpr вместо того, чтобы полагаться на путь поиска, чтобы найти их, когда они неявно добавляются через другой Блок.
Используйте бесплатный анализатор Pascal для поиска неиспользуемых единиц в вашем коде.