определение того, какой глагол использовать для имен методов в Java - PullRequest
22 голосов
/ 22 августа 2011

Я понимаю, что соглашения об именах важны по ряду причин, большинство из которых связано с тем, чтобы сделать ваш код более читабельным и легче интегрировать в большие проекты и т. Д. В Java большинство соглашений требует, чтобы имена методов были в lowerCamelCase начать с глагола.

У меня вопрос: как выбрать глагол, чтобы начать имя метода?

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

Вот пример. У меня есть метод, который принимает double[] array и int k и возвращает double[] newArray, что является длиной k скользящего среднего array, то есть newArray[i] = (array[i-k+1]+...+array[i])/k с некоторой помадкой, чтобы сделать newArray такой же длины, как array. Я склонен вызывать этот метод movingAverage, потому что это то, что он возвращает, но это не так, поскольку он не начинается с глагола. Должен ли я назвать этот метод getMovingAverage или generateMovingAverage или calculateMovingAverage или это не имеет значения?

Ответы [ 7 ]

29 голосов
/ 22 августа 2011

Я обычно спрашиваю себя:

Что делает этот метод?

Ответ диктует, как метод должен быть вызван. Конечно, он полностью независим от программиста.

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

Выбор глагола вашего метода:

  • Выполнение расчетов: вычисление
  • Получение данных: получить или получить
  • Мутирующие данные: набор или изменение
  • Удаление данных: удалить или удалить
  • Преобразование: преобразование
  • Инициирование действия: начало или начало
  • Остановка действия: Стоп или Отмена

Теперь не все методы начинаются с глагола; но им действительно не нужно. Если вы читаете:

... myString.length();

или

... myArray.size();

вы точно знаете, что происходит - глагол не требуется. Это верно для многих методов класса выше в иерархии Java; Коллекции, математика и т. Д. До тех пор, пока имя точно сообщает, что делает метод, все в порядке.

1 голос
/ 28 марта 2017

Не забудьте использовать эти глаголы "есть, имеет или может" для логических методов, таких как: is On (), is Full () и т. д.

0 голосов
/ 21 июня 2019

Относительно использования get и set методов для средств доступа к свойствам только : весь смысл скрытия информации заключается в том, что пользователь API (то есть вызывающий код) ) не нужно знать или зависеть от того, хранится ли имущество или рассчитывается на лету. Реализация должна быть в состоянии изменить в любое время, пока API остается неизменным.

0 голосов
/ 23 августа 2011

Я не думаю, что имена методов java должны «начинаться с глагола», я думаю, что они должны описывать действие. Это часто требует глагола, поскольку глаголы описывают действия. Обычно они являются важными частями описания (getVar и setVar означают совершенно разные вещи). Иногда они ничего не добавляют к описанию (можете ли вы придумать что-нибудь, что будет работать с movingAverage, кроме получения / вычисления / генерации?) И должно быть отброшено.

0 голосов
/ 22 августа 2011

Я думаю, чтобы найти что-нибудь, что могло бы быть «решением» проблемы, мы должны сначала извлечь критерии, которые играют любую роль в выборе имени, например:

  • удобочитаемость (тривиально: getValue вместо TransferValueFromThisObjectToYou)
  • удобство (тривиально: вместо getCoordValue)
  • семантика метода (get не совпадает с вычислением)
  • контекст использования (в IDE я обычно набираю aaa.get_ и нажмите Ctrl + Пробел, чтобы проверить, что я могу получить от объекта)
  • направляющие кода (или другие «направляющие», такие как соглашение Java Bean, которое заставляет вас использовать некоторые имена)

...

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

0 голосов
/ 22 августа 2011

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

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

Лучший

0 голосов
/ 22 августа 2011

( Мое мнение ) Вам не нужен глагол в имени метода, если у объекта нет состояния, как в математической библиотеке.Сравните computeSquareRoot (x) и getJoin (listOfStrings) с squareRoot (x) и join (listOfStrings).

...