Зачем дьявол придумал javadoc

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

Компания SUN даже придумала специальный формат javadoc - “стандарт для документирования классов Java”. В моей практике было совершенно обычным явлением, когда какой-то код не проходил Code Review, потому что в нём у некоторых методов отсутствовали комментарии.

Сегодня я расскажу, почему комментарии - это зло.

Например

Возьмём пример из жизни. Это реальный код, написанный вполне старательным программистом, который не поленился и написал комментарий к своему методу. Довольный собой, но пошёл налить себе чашечку кофе из аппарата, а мы давайте-ка пока посмотрим, что же тут у нас есть.

public class AddressUtil {
   /**
    * Format string as address, expected input
    * format:"EE ; ;Tallinn;Narva mnt;120B;831;10127"
    *
    * @param flatAddress
    * @return Formatted address
    */
   public static String toString(String flatAddress) {......}
}

Отлично! У нас есть корректно оформленный комментарий в формате javadoc, из которого специальная программа сможет сгенерировать HTML-документацию. По нему легко можно понять, что (теоретически) делает этот метод.

Где же спрятался дьявол?

Но где же те мелочи, в которых спрятался дьявол? А вот они:

Волшебство

А теперь давайте поиграем в волшебников и превратим несколько цветных кусочков в гирлянду. Сделаем несколько магических пассов. Сим-салябим, Ахалай-махалай, Ляськи-масяськи….

Что у нас получилось в итоге?

public class AddressUtil {
  public static String formatAddress(String flatAddress) {......}
}

public class AddressUtilTest {
  @Test public void testFormatAddress() {
    assertEquals("Narva mnt 120B-831  10127 Tallinn", 
      AddressUtil.formatAddress("EE ; ;Tallinn;Narva mnt;120B;831;10127"));
  }
}

Чем же новый вариант лучше старого?

Одним словом,

ХОРОШЕЕ НАЗВАНИЕ + ТЕСТЫ = ДОКУМЕНТАЦИЯπ

а точнее, “запускаемая документация” (executable documentation), то есть документация, которую можно не просто читать, но ещё и “запускать”, автоматически проверяя, что она всё ещё адекватна.

Говорят, у Конфуция над кроватью висел плакат:

Convert comments to executable documentation

Послесловие

Боюсь только, что наш доблестный программист, вернувшись с кухни, фокуса не поймёт, ведь он не видел наших волшебных движений. Ему снесёт башню от одного только факта, что его комментарии КТО-ТО НАГЛО ПОТЁР, и он постарается нас найти и уничтожить за такую подрывную деятельность.

А его кофе тем временем остынет. Ну что ж, и то неплохо: ведь кофе, говорят, вреден. Значит, одно хорошее дело мы всё-таки сегодня сделали.

Confucius