Соглашения об именах для методов Java, которые возвращают логическое значение (без знака вопроса) - PullRequest
81 голосов
/ 06 октября 2010

Мне нравится использовать вопросительный знак в конце имен методов / функций на других языках.Ява не позволяет мне делать это.В качестве обходного пути, как еще я могу назвать логические методы возврата в Java?Использование is, has, should, can в начале метода звучит хорошо для некоторых случаев.Есть ли лучший способ назвать такие методы?

Например, createFreshSnapshot?

Ответы [ 6 ]

100 голосов
/ 06 октября 2010

Соглашение состоит в том, чтобы задать вопрос от имени.

Вот несколько примеров, которые можно найти в JDK:

isEmpty()

hasChildren()

Таким образом, имена читаются так, как будто на их конце стоит знак вопроса.

Коллекция пуста?
Есть ли у этого узла дети?

А затем true означает «да», а false означает «нет».

Или вы можете прочитать это как утверждение:

Коллекция пуста.
У узла есть дети

Примечание:
Иногда вы можете захотеть назвать метод что-то вроде createFreshSnapshot?. Без знака вопроса имя подразумевает, что метод должен создавать моментальный снимок, а не проверять, нужен ли он.

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

Если вы выполните Поиск Google для isEmpty() в Java API, вы получите множество результатов.

27 голосов
/ 06 октября 2010

Если вы хотите, чтобы ваш класс был совместим со спецификацией Java Beans , чтобы инструменты, использующие отражение (например, JavaBuilders , JGoodies Binding ) могли распознавать логические getters, используйте getXXXX() или isXXXX() в качестве имени метода. Из спецификации Java Beans:

8.3.2 Булевы свойства

Кроме того, для логических свойств мы разрешаем методу getter соответствовать шаблону:

public boolean is <<em> PropertyName > ();

Этот метод «is <<em> PropertyName >» может быть предоставлен вместо метода «get <<em> PropertyName >» или в дополнение к «get <*». 1026 * PropertyName </em>> ”. В любом случае, если метод «is <<em> PropertyName >» присутствует для логического свойства, тогда мы будем использовать метод «is <<em> PropertyName >» для чтения значения свойства. Пример логического свойства может быть:

public boolean isMarsupial();
public void setMarsupial(boolean m);
21 голосов
/ 04 апреля 2012

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

Рекомендации по стилю программирования Java

Элемент 14имеет особое значение и предлагает префикс is .

В руководстве по стилю предлагается:

Существует несколько альтернатив is префикс, который подходит лучше в некоторых ситуациях.Это имеет , может и должен префиксы:

boolean hasLicense();
boolean canEvaluate();
boolean shouldAbort = false;

Если вы будете следовать Руководству, я считаю, что соответствующий метод будетбыть названным:

shouldCreateFreshSnapshot()
13 голосов
/ 06 октября 2010

Для методов, которые могут не работать, то есть вы указываете логическое значение в качестве возвращаемого типа, я бы использовал префикс try:

if (tryCreateFreshSnapshot())
{
  // ...
}

Для всех остальных случаев используйте префиксы, такие как is.. has.. was.. can.. allows.. ..

5 голосов
/ 06 октября 2010

Стандартным является использование «is» или «has» в качестве префикса. Например isValid, hasChildren.

2 голосов
/ 06 октября 2010

is - это тот, с кем я сталкивался чаще других. Что бы ни имело смысл в текущей ситуации, это лучший вариант.

...