2008-10-17 3 views
49

Должен ли я писать Doc-комментарии для всех моих java-методов?Используете ли вы Javadoc для каждого метода, который вы пишете?

+0

Я считаю, что текущий вариант ответа является неполным и частично ложным. Я обобщил лучшие из других ответов в сообщении community-wiki (нет кармы). Вместо этого вы можете выбрать этот вариант: – VonC 2008-10-18 08:55:21

ответ

47

@Claudiu

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

@Daniel Spiewak

Я тщательно документировать каждый публичный метод в каждом классе API. Классы, которые имеют публичные элементы, но не предназначенные для внешнего потребления, заметно выделяются в классе javadoc. Я также документирую каждый защищенный метод в каждом классе API, хотя и в меньшей степени. Это говорит о том, что любой разработчик, который расширяет класс API, уже будет иметь справедливое представление о том, что происходит.

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

@Paul де Vrieze

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

/** 
* Get the current value of the foo property. 
* The foo property controls the initial guess used by the bla algorithm in 
* {@link #bla} 
* @return The initial guess used by {@link #bla} 
*/ 
int getFoo() { 
    return foo; 
} 

И да, это больше работы.

@VonC

При разрыве огромный комплексный метод (из-за high cyclomatic complexity причины) в:

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

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

И помните: limit values or boundary conditions также должен быть частью вашего javadoc.

Plus, Javadoc это лучше, чем просто «// комментарий»:

  • Признан IDE и используется для отображения всплывающего окна при наведении курсора на вершине одного вашей - javadoc-ed - функции. Например, константа - это частная статическая конечная переменная - должна иметь javadoc, особенно когда ее значение не является тривиальным. Дело в точке: регулярное_выражение (его Javadoc должна включает в себя регулярное выражение в его не-избежали формы, что является целью является и буквальным пример сопровождаться регулярным выражением)
  • Это может быть проанализировано с помощью внешних средств (например, xdoclet)

@Domci

Для меня, если кто-то увидит его или нет, не имеет значения, - это вряд ли я буду знать, что делает какой-то неясной кусок кода, который я написал после того, как пару месяцев , [...]
Короче говоря, логика комментариев, а не синтаксис, и делайте это только один раз, в нужном месте.

@Miguel Ping

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

24

I полностью документ каждый публичный метод в каждом классе API. Классы, которые имеют публичные элементы, но не предназначенные для внешнего потребления, заметно выделяются в классе javadoc. Я также документирую каждый защищенный метод в каждом классе API, хотя и в меньшей степени. Это говорит о том, что любой разработчик, который расширяет класс API, уже будет иметь справедливое представление о том, что происходит.

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

+3

«Я буду иногда документировать приватные и пакетные частные методы для моей собственной выгоды». Это нормально, если вы единственный человек, который когда-либо будет смотреть на код, но не иначе. – DJClayworth 2008-11-28 20:34:16

+1

Я не думаю, что это отвечает на вопрос. Он описывает только то, что вы обычно делаете. Я хотел бы знать, почему. – 2010-01-22 09:38:31

+2

«Классы, которые имеют публичные элементы, но не предназначенные для внешнего потребления, заметно выделяются в классе javadoc». <- Как вы их отмечаете? – phyzome 2011-06-20 20:54:01

27

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

Комментарии, как

/** Does Foo */ 
void doFoo(); 

на самом деле не так уж полезно. (Чрезмерно упрощенный пример, но вы получите идею)

1

просто поставить: ДА

времени вы должны думать о том, следует ли вам написать документ, лучше инвестирован в написании документа.

Написание однострочного изображения лучше, чем тратить время на то, чтобы не документировать метод вообще в конце.

0

В предыдущей компании мы использовали форматирование кода jalopy с затмением. Это добавит javadoc ко всем методам, включая private.

Это сделало жизнь трудной для создания документов и геттеров. Но что, черт возьми. Вы должны это сделать - вы это делаете. Это заставило меня изучить некоторые макрофункции с помощью XEmacs :-) Вы можете автоматизировать его еще дальше, написав парсер и комментатор java, например, создатель ANTLR несколько лет назад :-)

В настоящее время я документирую все общедоступные методы и что-то большее, чем 10 строк.

6

Когда я пишу код для себя - NO. В этом случае joc doccing является пустой тратой моего времени.

Когда я пишу код, который другие будут использовать - Да. Каждый метод, который может использовать кто-то другой (любой публичный метод), должен иметь документ java, по крайней мере, указывая на его очевидную цель. Для хорошего теста - запустите утилиту создания javadoc для вашего кода (я забыл точную командную строку сейчас). Просмотрите веб-страницу, которую он создает. Если вы будете удовлетворены использованием библиотеки с этим уровнем документации, вы будете золотыми. Если нет, Запишите больше javadocs в свой код.

1

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

14

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

/** 
* Get foo 
* @return The value of the foo property 
*/ 
int getFoo() { 
    return foo; 
} 

Является не полезно. Лучше сделайте что-нибудь вроде:

/** 
* Get the current value of the foo property. 
* The foo property controls the initial guess used by the bla algorithm in 
* {@link #bla} 
* @return The initial guess used by {@link #bla} 
*/ 
int getFoo() { 
    return foo; 
} 

И да, это больше работы.

11

Все базы, которые уже закрыты другими; одна дополнительная нота:

Если вы обнаружили это сделать:

/** 
* This method currently launches the blaardh into the bleeyrg. 
*/ 
void execute() { ... } 

Рассмотрим изменение его в этом:

void launchBlaardhIntoBleeyrg() { ... } 

Это может показаться немного очевидным, но во многих случаях возможность легко пропустить в своем коде.

Убеждайтесь, что изменение не всегда хотел; например, поведение метода можно ожидать с течением времени (обратите внимание на слово «в настоящее время» в JavaDoc).

0

Я стараюсь, по крайней мере, документировать все общедоступные свойства и метод интерфейса, чтобы люди, звонящие в мой код, знали, что это такое. Я также стараюсь комментировать как можно больше в строке, а также ради обслуживания. Даже «личные» проекты, которые я делаю в свое время только для себя, я пытаюсь выполнить javadoc только потому, что я могу его закончить в течение года и вернуться к нему позже.

2

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

  1. API, классы рамок и внутренние статические методы многократного использования должны быть тщательно прокомментированы.

  2. Логика в каждом сложном фрагменте кода должна быть объяснена в двух местах - общей логике в javadoc и логике для каждой значимой части кода в ее собственном комментарии.

  3. Свойства модели следует прокомментировать, если они не очевидны. Например, нет смысла комментировать имя пользователя и пароль, но тип должен, по крайней мере, иметь комментарий, который говорит, какие возможные значения для типа.

  4. Я не документирую геттеры, сеттеры или что-нибудь сделанное «по книге». Если у команды есть стандартный способ создания форм, адаптеров, контроллеров, фасадов ... Я их не документирую, поскольку нет смысла, если все адаптеры одинаковы и имеют набор стандартных методов. Любой, кто знаком с фреймворком, будет знать, для чего они предназначены - предполагая, что философия рамки и способ работы с ней где-то документированы. В этом случае комментарии означают дополнительный беспорядок и не имеют никакой цели. Есть исключения из этого, когда класс делает что-то нестандартное - тогда короткий комментарий полезен. Кроме того, даже если я создаю форму стандартным образом, мне нравится разделить части формы с короткими комментариями, которые делят код на несколько частей, например «здесь начинается адрес выставления счетов».

Короче говоря, логика комментариев, а не синтаксис, и делайте это только один раз, в нужном месте.

6

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

0

Я делаю это для того, чтобы писать комментарии javadoc всякий раз, когда это нетривиально. Написание комментариев javadoc при использовании IDE, таких как eclipse или netbeans, не так уж и затруднительно. Кроме того, когда вы пишете комментарий javadoc, вы вынуждены думать не только о том, что делает этот метод, но и о том, что делает метод точно и сделанные вами предположения.

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

0

Вы можете запустить javadoc против кода, который не имеет javadoc-комментариев, и он будет генерировать довольно полезные javadocs, если вы дадите продуманные имена вашим методам и параметрам.

1

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

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

Вы можете автоматизировать создание комментариев Javadoc для getters/seters из Eclipse с помощью шаблонов кода, чтобы сэкономить объем документации, которую вы должны написать. еще один совет - использовать @ {$ inheritDoc}, чтобы предотвратить дублирование комментариев кода между интерфейсами и классами реализации.

2

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

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

Если для объяснения того, что класс или метод делает его имя слишком длинным для рассмотрения, класс или метод недостаточно сфокусированы и должны быть реорганизованы на более мелкие единицы.

0

Предполагается, что во всех ответах пока что комментарии будут хорошими. Как мы все знаем, это не всегда так, иногда они даже неправильны. Если вам нужно прочитать код, чтобы определить его намерение, границы и ожидаемое поведение ошибки, комментарий отсутствует. Например, это метод потокобезопасный, может ли любой arg быть null, он может возвращать null и т. Д. Комментарии должны быть частью любых обзоров кода.

Это может быть еще более важным для частных методов, поскольку разработчику базы кода придется бороться с проблемами, которые пользователь API не будет использовать.

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

0

Javadoc может быть действительно полезен для библиотек и компонентов многоразового использования. Но давайте будем более практичными. Более важно, чтобы я сам объяснял код, чем javadoc. Если вы представляете себе огромный проект наследия с Javadocs - вы бы на это положились? Я так не думаю ... Кто-то добавил Javadoc, затем реализация изменилась, добавлена ​​новая функция (удалена), поэтому Javadoc устарел. Как я уже говорил, я хотел бы иметь Javadocs для библиотек, но и для активных проектов, которые я предпочел бы

  • небольшие функции/классы с именами, которые описывают то, что они делают
  • очевидные случаи модульного тестирования, которые дают объяснение того, что функция /классы делают
4

нет, не комментируйте каждый метод, переменную, класс и т.д ..

Вот цитата из «чистого кода: Справочник по Agile Software мастерства»:

Просто глупо иметь правило, в котором говорится, что каждая функция должна содержать javadoc , или каждая переменная должна иметь комментарий. Комментарии вроде этого просто загромождают вверх по коду, popagate ложь, и придают общую путаницу и дезорганизацию.

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

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

Смежные вопросы