Как быть достаточно конкретным в написании Javadoc

У меня есть вопрос, связанный с написанием стандартных комментариев Javadoc. Они просят нас быть максимально конкретными и использовать предикаты для описания кода, но если у меня есть переменная "d", написанная в моем комментарии, но не указанная в моем коде, это создаст проблему?

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

/**
 * Find the great common divisor between a 2 number.
 *
 * @param a number1 
 * @param b number2
 * @return (\max d; ; a % d == 0 && b % d == 0) 
 **/

public static int GCD(int a, int b) {
    if (b == 0) {
        return a;
    }
    return GCD(b, a % b);
}

1 ответ

Решение

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

Поэтому обычно детали реализации не должны включаться в документацию (если в вашей реализации есть переменная с именем "d", это не должно иметь значения для вашей документации). Вы должны быть в состоянии провести рефакторинг или изменить внутренние детали, не затрагивая при этом вашу документацию.

Примерами исключений являются факты, которые влияют на:

  • поведение (то есть безопасность потока)
  • производительность (можно утверждать, что полет на луну повлияет на производительность;))
  • безопасность
  • ...

Так что же интересует пользователя?

  • что делает метод - пользователь, вероятно, не обладает такими же знаниями, как вы, поэтому вы многое объясняете (например, не каждый знает, что такое GCD)
  • какие параметры ожидаются, каковы они и как они должны выглядеть (в вашем примере важно, чтобы числа были положительными и целыми числами, в вашем случае "a" и "b" могут быть 0 - но не каждое определение GCD имеет 0 в качестве действительного значения)
  • что я могу ожидать, чтобы быть возвращенным, что возвращается в пограничных случаях (например, a и b =0)
  • какие исключения мне нужно ожидать и когда они выбрасываются

Таким образом, документация для вашего метода может выглядеть так:

    /**
     * Returns the greatest common divisor of the two given positive whole numbers. 
     * <p>
     * The greatest common divisor (GCD) is the largest whole number that 
     * is a factor of both of the given numbers. <br>
     * A number is a GCD if it has the following properties: [...] //add the properties here
     * <p>
     * Example: the GCD of 20 and 16 is 4 
     * 
     * @param a
     *            the first positive whole number, may be 0 
     * @param b
     *            the second positive whole number, may be 0
     * @return the greatest common divisor of the given numbers. Returns 0 if a and b are 0. 
     * Returns the not 0 number if one is 0.
     **/

    public static int findGreatCommonDivisor( int a, int b )
    {
        if ( b == 0 )
        {
            return a;
        }
        return findGreatCommonDivisor( b, a % b );
    }
Другие вопросы по тегам