Оптимизация кода - неиспользуемые методы - PullRequest
0 голосов
/ 05 марта 2011

Как я могу определить, будет ли метод никогда не использоваться?

Я знаю, что для файлов и библиотек dll вы не можете знать, будет ли когда-либо другой (другой проект) использовать код.*

В общем, я предполагаю, что что-то общедоступное может использоваться где-то еще.
Но как насчет частных методов?Можно ли предположить, что, если я не увижу явный вызов этого метода, он не будет использоваться?

Я предполагаю, что для частных методов решение проще.Но безопасно ли решать это ТОЛЬКО для частных методов?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2013

Что вам нужно, чтобы знать , это (или все возможные) точки входа в ваш код:

  • Для простой программы командной строки это "основной" метод или, в самом простом случае, верхняя часть вашего скрипта.
  • Для библиотек - это все, что видно снаружи.
  • Ситуация становится более сложной, если на методы можно ссылаться извне посредством самоанализа. Это зависит от языка и требует знания деталей используемых методов.

Что вам нужно сделать - это рекурсивно следовать всем ссылкам со всех точек входа, чтобы разметить все используемые методы. Все, что не помечено, может быть безопасно - и должно - быть удалено.

Поскольку это прилежная, но рутинная часть работы, существуют инструменты, которые делают это для различных языков программирования. Примеры включают ReSharper для C # или ProGuard для Java.

0 голосов
/ 05 марта 2011

Зависит от языка, но обычно имя, которое встречается в программе один раз и не является публичным / не экспортируется, не используется. Существуют исключения, такие как конструкторы и деструкторы, перегрузки операторов (в C ++ и Python, где имя в точке определения не совпадает с именем на сайте вызова) и различные другие методы.

Например, в Python, чтобы позволить индексации (foo[x]) работать, вы определяете метод __getitem__ в классе, к которому принадлежит foo. Но вряд ли когда-нибудь вы бы назвали __getitem__ явно.

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