Подтвердить что ты не робот

Определение того, какой глагол использовать для имен методов в Java

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

... myString.length();

или

... myArray.size();

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Лучшие

Ответ 5

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

  • readableness (тривиальный: getValue вместо передачиValueFromThisObjectToYou)
  • удобство (тривиальное: getCoordValue вместо)
  • семантика метода (get не совпадает с вычислением)
  • контекст использования (в IDE я обычно набираю aaa.get_ и нажимаю Ctrl + Space, чтобы проверить, что я могу получить от объекта)
  • справочники кода (или другие "руководства", такие как Java Bean, которые заставляют вас использовать некоторые имена)

...

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

Ответ 6

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

Ответ 7

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