Почему имена методов 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" ?