Использование оглавления в коде? - PullRequest
3 голосов
/ 13 марта 2010

Используете ли вы оглавление для перечисления всех функций (и, возможно, переменных) класса в начале большого файла исходного кода? Я знаю, что альтернативой такому листингу будет разделение больших файлов на более мелкие классы / файлы, чтобы объявление их классов было достаточно понятным, но некоторые сложные задачи требуют большого количества кода. Я не уверен, стоит ли тратить ваше время на разделение реализации на несколько файлов? Или можно создать индекс-листинг дополнительно к объявлению класса / интерфейса?

EDIT:

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

/*
CONTENTS

Order_mouse_from_to_points
Lines_intersecting_with_upper_point
Lines_intersecting_with_both_points
Lines_not_intersecting
Lines_intersecting_bottom_points
Update_intersection_range_indices
    Rough_method
    Normal_method
        First_selected_item
        Last_selected_item
        Other_selected_item

*/


void SelectionManager::FindSelection()
{

    // Order_mouse_from_to_points
    ...
    // Lines_intersecting_with_upper_point
    ...

    // Lines_intersecting_with_both_points
    ...

    // Lines_not_intersecting
    ...

    // Lines_intersecting_bottom_points
    ...

    // Update_intersection_range_indices
    for(...)
    {
        // Rough_method
        ....

        // Normal_method
        if(...)
        {
            // First_selected_item
            ...

            // Last_selected_item
            ...

            // Other_selected_item
            ...
        }


    }

}

Обратите внимание, что элементы индекса не имеют пробелов. Из-за этого я могу нажать на них и нажать F4, чтобы перейти к использованию предмета, и F2, чтобы вернуться назад (простые визуальные ярлыки студии find-next / prevous-shortcuts).

EDIT:

Другое альтернативное решение этой индексации - использование свернутых областей c #. Вы можете настроить визуальную студию так, чтобы она отображала только названия регионов и скрывала весь код. Конечно, поддержка клавиатуры для навигации по исходному коду довольно громоздка ...

Ответы [ 5 ]

10 голосов
/ 13 марта 2010

Я знаю, что альтернативой такому листингу будет разделение больших файлов на более мелкие классы / файлы, чтобы объявление их классов было достаточно понятным.

Correct.

но некоторые сложные задачи требуют много кода

Неправильно. Хотя требуется «много» кода, длинные прогоны кода (более 25 строк) действительно плохая идея.

на самом деле не список функций, а блоки кода внутри функции

Хуже. Функция, для которой требуется оглавление, должна быть разбита на более мелкие функции.

Я не уверен, стоит ли тратить ваше время на разделение реализации на несколько файлов?

Абсолютно обязательно разбивать вещи на более мелкие файлы. Людям, которые поддерживают, адаптируют и повторно используют ваш код, нужна вся помощь, которую они могут получить.

нормально ли создавать индексный листинг дополнительно к объявлению класса / интерфейса?

Нет.

Если вам придется прибегнуть к такого рода уловкам, он слишком велик.

Кроме того, во многих языках есть инструменты для генерации документов API из кода. Java, Python, C, C ++ имеют инструменты документации. Даже с Javadoc, epydoc или Doxygen вам все равно придется разрабатывать вещи так, чтобы они были разбиты на интеллектуально управляемые части.

  1. Упростите вещи.

  2. Используйте инструмент для создания индекса.

5 голосов
/ 13 марта 2010

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

1 голос
/ 13 марта 2010

Я бы никогда не сделал такую ​​занятую работу в своем коде. Самое большее, что я бы сделал вручную - это вставил несколько строк вверху файла / класса, объясняющих, что сделал этот модуль и как он предназначен для использования.

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

0 голосов
/ 14 марта 2010

Я делал такие вещи. Не целые оглавления, но схожий принцип - просто специальные ссылки между комментариями и конкретным фрагментом кода, о котором идет речь. Кроме того, чтобы связать фрагменты кода, которые делают те же упрощающие предположения, которые, как я подозреваю, может потребоваться исправить позже.

Вы можете использовать список задач Visual Studio, чтобы получить список определенных типов комментариев. Формат комментариев можно настроить в меню Сервис | Параметры, Окружение \ Список задач. Это не то, что я в конечном итоге использовал сам, но похоже, что это может помочь в навигации по коду, если вы часто используете эту систему.

0 голосов
/ 13 марта 2010

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

РЕДАКТИРОВАТЬ: Вы можете использовать функцию «Показать иерархию вызовов» Eclipse при программировании.

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