Соглашения об именах для java-методов, возвращающих логические значения (без знака вопроса)

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

Например, createFreshSnapshot?

Ответ 1

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

isEmpty()

hasChildren()

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

Является ли коллекция пустой?
У этого Node есть дети?

И тогда true означает "да", а false означает "нет".

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

Коллекция пуста.
Node имеет детей

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

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

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

Ответ 2

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

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

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

public boolean is < ИмяСвойствa > ();

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

public boolean isMarsupial();
public void setMarsupial(boolean m);

Ответ 3

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

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

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

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

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

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

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

shouldCreateFreshSnapshot()

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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