Почему имена методов Java используют префикс "get" так широко? По крайней мере, в моих программах Java существует множество методов с именами, начинающимися со слова "get" . Процент get-методов подозрительно высок. Я начинаю чувствовать, что слово "получить" теряет смысл из-за инфляции. Это шум в моем коде.
Я заметил, что в функционально-декларативном программировании и PL/SQL используется другое соглашение об именах. Имя метода просто указывает, что возвращает метод. Вместо account.getAmount()
или Time.getIsoFormattedDateString(Date date)
они будут использовать account.amount()
и Time.isoFormattedDateString(Date date)
. Это имеет для меня смысл, так как имя функции описывает результат оценки метода (предполагая, что побочных эффектов не существует, чего не должно быть в любом случае). Префикс "получить" кажется излишним.
Я только что начал читать книгу "Чистый код". В нем говорится, что методы должны делать только одно, и что эта вещь обычно должна быть одной из следующих:
- Уведомлять о каком-либо объекте о событии, обычно передавая событие как параметр.
- Задайте вопрос о каком-либо объекте, как правило, с именем метода, формирующим выражение естественного языка, передающим объект в качестве параметра и возвращающим логическое значение.
- Извлеките что-нибудь, возможно, передав какой-либо ключ поиска или какой-либо объект, который будет преобразован в качестве параметра, и всегда возвращающий желаемый объект/значение.
Мой вопрос касается третьей категории. Существуют ли соглашения об именах, отличные от "get" для такого рода методов? Какие критерии вы используете при выборе имен/префиксов методов?
Вот пример:
У меня есть класс с двумя методами getDates()
и getSpecialDates()
. getDates()
просто возвращает значение частной переменной (ссылка на коллекцию дат). Это, как я понимаю, стандартный геттер. getSpecialDates()
отличается; он вызывает getDates()
, выбирает фильтр из другого класса, применяет фильтр и возвращает то, что фактически является подмножеством getDates()
.
Метод getSpecialDates() может быть назван computeSpecialDates()
, findSpecialDates()
, selectSpecialDates()
или elicitSpecialDates()
или что угодно. Или я могу просто назвать его specialDates()
. И затем, для согласованности, я мог бы переименовать getDates()
в dates()
.
Зачем беспокоиться о разделении методов, которые следует префикс "get" , и методов, которые не должны, и зачем искать заменяющие слова для "get" ?