Почему имена методов Java используют префикс «get» так широко? По крайней мере, в моих программах Java существует множество методов с именами, начинающимися со слова «get». Процент get-методов подозрительно высок. Я начинаю чувствовать, что слово «получить» теряет смысл из-за инфляции. Это шум в моем коде.Соглашения о присвоении имен Java: слишком много геттеров
Я заметил, что в функционально-декларативном программировании и 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»?
Использование «getThis» и «getThat» не теряет смысла, поскольку каждый получает действительно доступ. Это помогает понять, что вы делаете. Это не похоже на то, что компилятор собирается сказать «О, а другой получается? Теперь вы просто говорите об этом ...» – corsiKa